访问控制方式这里有篇很好的文章,其实内容也是总结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. CSS实现开门效果

    .door{ position: relative; width: 450px; height: 300px; border: 1px solid #000; margin: 100px auto; ...

  2. C语言中局部变量和全局变量关于释放

    1.全局都属于静态,局部区分静态非静态,局部静态和全局的区别在于可见范围,局部能使用外部看不见的意思,本质相同的. 2.如果是全局变量或局部静态变量,编译器会为其分配一个位于静态存储区的地址.这个地址 ...

  3. shell 脚本请求接口报错

    2023-01-18 22:07:07.984 WARN 11700 --- [io-9044-exec-10] .w.s.m.s.DefaultHandlerExceptionResolver : ...

  4. RBAC(DAC)模型

    基于角色的访问控制模型 ⟨ , ,,, , , ,, ,⟩ U:用户集 S:会话集 O:资源集 Op:操作集 R:角色集 PERMS:OxOp:权限集 RH:RXR(是 的偏序,表示角色的层次结构,其 ...

  5. 关于同时使用Vue.js 和 Jquery时dom事件失效问题

    先加载vue.js,让页面渲染完成后加载jq,给jq绑定ready事件 $(document).ready(function(){ $(function(){ (Jq) }); });

  6. Ubuntu之root密码重置

    (1)系统开机时,连按或者长按shift键,出现GRUB界面,选择并进入"Ubuntu 高级选项",

  7. (0821) git 下拉code不稳

    (1)红帽粘贴  vncconfig & (2)csh不稳定 解决办法: bash eval "$(ssh-agent -s)" ssh-add git pull 或者 g ...

  8. ASP.NET中maxRequestLength和maxAllowedContentLength的区别;上传大文件设置IIS7文件上传的最大大小

    https://blog.csdn.net/qq_23663693/article/details/89920039 maxRequestLength表示ASP支持的最大请求大小,而maxAllowe ...

  9. http 1.0、2.0、3.0 之间的区别

    首先是HTTP协议: HTTP 是 HyperText Transfer Protocol(超文本传输协议)的缩写,它是互联网上应用最为广泛的一种网络协议,所有 WWW 文件都必须遵守这个标准.其他的 ...

  10. 在windows上远程linux (待完善)

    一.准备工具   windows linux 系统 win10 centos7 软件 远程桌面连接(自带) xrdp(epel库提供):开源的远程桌面协议(RDP)服务 二.Linux(被连接端) 2 ...