访问控制方式这里有篇很好的文章,其实内容也是总结c++primer上的内容

现在就按照这篇的文章举例进行学习.

思路

不同继承方式的影响主要体现在:

1、派生类成员对基类成员的访问控制。

2、派生类对象对基类成员的访问控制

三种继承方式

公有继承(public)

所有public和protected成员在派生类中的访问方式不变,但是私有成员(private)不能访问

  1. 通过派生类的成员函数能够访问基类的public和protected成员,但是不能访问基类的成员.

  2. 通过派生类的对象能够只能访问基类中的public成员.

举例说明

class A {
public :
int a = 0;
protected:
int b = 0;
private:
int c = 0;
} class B:public A{
public:
void test1(){
cout
} }class A {
public :
int a = 0;
protected:
int b = 0;
private:
int c = 0;
}; class B:public A{
public:
void test1(){
cout<<"visit public a "<< a<<endl;
}
void test2(){
cout << "visit protected "<< b <<endl;
}
void test3(){
// cout << "visit private "<< c <<endl; 违反第1)条 报错
}
}; int main()
{
B b;
b.test1();
b.test2();
//b.test3();
cout << b.a<<endl;
// cout << b.b<<endl; 违反第2)条 报错
// cout << b.c<<endl; 违反第3)条 报错
return 0;
}

私有继承(private)

基类中的成员都以private的身份出现在派生类当中,派生类中的成员不能访问父类的private成员

1)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员

2)通过派生类的对象不能访问基类中的任何成员。

如果将上边的代码改成B私有继承A.新增一条报错语句 cout << b.a <<endl;违反2)

保护继承(protected)

基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可访问。

1)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员。

2)通过派生类的对象不能访问基类中的任何成员。

它的报错情况同private.其实在垂直访问上procted与public相同,对类对象的用户来说,它又和private相同.即实现了代码重用的同时还限定了用户的访问权限.为了说明问题我们再加一个类:

class C: protected B{
public:
void test2(){
cout << "visited b in C"<< b<<endl;
} };

如果有:

C c;

c.b肯定报错,但是C中test2()函数不会报错,可以访问b,因为b的protect属性被传递过来了.但是如果B私有继承A的话,b就不会传递过来.代码重用性就不好了.

当然还有一些其他有待研究的遗留问题,比如友元在访问控制中有什么作用呢,会不会被继承.六大函数在继承中又扮演着什么角色.留待以后继续研究.如要深究,请仔细阅读c++ primer P549的内容继续学习.

c++ 继承访问控制初步的更多相关文章

  1. C++ 类继承 笔记(初步)

    本节内容源于对C++ primer第13章的学习,这本书把C++的原理将得明明白白.网上的博客往往讲得一头雾水.到头来还不如看原书本. 问题 首先给出一题: #include<stdio.h&g ...

  2. C#---------------继承和多态初步

    继承:在程序中,如果一个类A:类B,这种机制就是继承. 子类可以继承父类的所有内容(成员)吗? 解析: 1.私有成员(属性和方法) 2.构造函数 3.final修饰过的方法,子类不能进行重写 3.访问 ...

  3. C++继承和多态

    继承 访问控制 基类的成员函数可以有public.protected.private三种访问属性. 类的继承方式有public.protected.private三种. 公有继承 当类的继承方式为pu ...

  4. 快速理解类的访问控制(public,protected,private)

    接触过面向对象编程的朋友们都知道类中的访问控制符无非有三个,public, protected, private. 理解他就先从期望他达到的效果先说吧 Public: 使成员对于整个程序内(类内类外) ...

  5. C++学习笔记-继承

    类之间可以建立联系,这就使得类可以有某种关系 类之间的关系 has-A:包含关系,一个类使用另一个已经定义好的类的数据 uses-A:使用关系,友元或者对象参数传递 is-A:是的关系,这就是继承,具 ...

  6. Maven之继承

    这里我还是将通过一个例子来了解一下Maven继承的初步使用配置.还是使用三个工程项目Project-Parent.Project-C和Project-D来进行说明,三个项目关系如下: <?xml ...

  7. 【windows 访问控制】四、访问控制项ACE

    访问控制项 具体内容 : https://docs.microsoft.com/zh-cn/windows-hardware/drivers/ifs/access-control-entry   访问 ...

  8. Java基础 —— 面向对象

    面向对象的程序设计: 1. 基本特征:抽象性,封装性,继承性,多态性. 2. 类及成员的访问控制:private:同一类中: default:同一包中: protected:子类中: public:全 ...

  9. C++ one more time

    写在前面:我们学习程序设计的方法先是模仿,然后举一反三.在自己的知识面还没有铺开到足够解决本领域的问题时,不要将精力过分集中于对全局无足轻重的地方!!! 以下参考钱能老师的<C++程序设计教程 ...

  10. mfc 友元类

    知识点 继承类成员的访问级别 友元类 继承访问控制: 基类 派生类(能否访问) public private protected 派生类类 派生类对象 派生类 派生类对象 派生类类 派生类对象 pri ...

随机推荐

  1. 使用Mockito 对方法中的私有void方法

    这里用一段代码举例 public void ruleJudgement(Long tenantId, Long productId, Long equipId, List<ModelAttrib ...

  2. redis底层数据结构之简单动态字符串(SDS)

    简单动态字符串(simple dynamic string,SDS) redis使用C语言编写的,但是redis的字符串却不是C语言中的字符串(以空字符'\0'结尾的字符数组),redis定义了一种简 ...

  3. RabbitMQ-00-Windows10安装RabbitMQ及安装使用过程中遇到的一些问题

    Window系统安装教程 安装参考博客:https://blog.csdn.net/spl545056/article/details/81392015 重装RabbitMQ时遇到的问题 安装提示成功 ...

  4. 073_SFDC Limit

    我们在开发的过程中,应多注意一些系统自身的限制,以及遇到此类问题的应对措施: Description Synchronous Limit Asynchronous Limit Total number ...

  5. 《Toward Fast, Flexible, and Robust Low-Light Image Enhancement》

    1.(23条消息) 图像增强评价标准EME和matlab代码_eme指标_zhonglingyuxiuYYX的博客-CSDN博客 2.nn.moduleList 3.LOE:lightness ord ...

  6. 一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(知识点补充二)

    MUX是什么?   MUX(multiplexer数据选择器):   在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也称多路选择器或多路开关.   多路转换器的作用主要 ...

  7. 基于MIPI的高性能成像系统

    硬件组件Digilent Genesys ZU × 1 (FPGA平台) Digilent PCAM5 × 1 (MIPI摄像头) 软件组件AMD-Xilinx Vivado 设计套件 介绍从简单的嵌 ...

  8. 遇到bug怎么分析,这篇文章值得一看

    博主总结的非常到位:https://mp.weixin.qq.com/s/UpaLWjix2tnfTqybx9dmoQ 为什么定位问题如此重要? 可以明确一个问题是不是真的"bug" ...

  9. jieba分词的分词模式比较

    sentence = "我来自中国人民大学" # 默认精确模式 words = jieba.cut(sentence) print("精确模式: %s" % & ...

  10. 网页端微信小程序客服

    https://mpkf.weixin.qq.com/ 可以设置自动回复