访问控制方式这里有篇很好的文章,其实内容也是总结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. seqsever 查询多个表的条数,并以列的形式展现

    select sum(a) a,sum(b) b,sum(c) c,SUM(d) d,sum(a1) a1,sum(b1) b1,sum(c1) c1,SUM(d1) d1 from( select ...

  2. 力扣(leetcode)题库0001-python3

    试一下leetcode的题库,不知道对于我这种小白要多长时,但是目标已经种下,去做就是了.You can do anything you set your mind to. 题目:题库链接 中:给定一 ...

  3. iOS组件化 pod命令创建私有库详解【引用其他私有库、oc、Swift混编】

    1.命令创建pod pod lib create pod的名字 2.根据指令依次填写信息 3.填写完成后会自动打开项目 .然后修改podspec文件即可 4.创建当前pod的git 仓库.将当前代码放 ...

  4. plugin的原理

    plugin插件的原理 扩展webpack, 加入自定义的构建行为 webpack内部的钩子 hooks tap: 可以注册同步钩子和异步钩子 tapAsync: 回调方式注册异步钩子 tapProm ...

  5. Flask + PyInstaller = 客户端

    Flask + PyInstaller = 客户端 有些特殊情况需要开发客户端,Python有几个常用的几个GUI框架,如 PyQt.wxPython等 但使用这些GUI框架往往界面比较丑,而且GUI ...

  6. Mac 压缩软件Keka

    ​ mac 的压缩软件Keka,相对比较好用的一款压缩软件 Keka - the macOS file archiver 点击下载 安装就好. ​编辑 支持可创建的压缩文件格式,和可解压缩的文件格式列 ...

  7. datax在win10中的安装

    datax安装需要的环境 JDK(1.8以上,推荐1.8) Python(推荐Python2.7.X) Apache Maven 3.x (Compile DataX) 这里只讲下python的安装和 ...

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

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

  9. Nginx日志切割工具logrorate

    1.logrotate系统工具 linux自带logrotate工具 主流的linux系统版本,都默认安装logrotate包,作为分割日志的系统工具,可以方便将日志按周期(日,周,月)和大小进行分割 ...

  10. 【Linux】ntpdate与ntpd区别

    前两天遇到时间显示的问题,整理记录下来. 问题描述:开机程序startA自己统计自己的运行时间,每次运行时间显示异常,类似17713d45h54m. 有一些猜测:1.计算异常,出现负数:2.获取时间异 ...