关于C++类成员访问级别(public,protected,private)与继承的形式(public, private)
来源:互联网 发布:java架构师书籍知乎 编辑:程序博客网 时间:2024/05/17 09:10
最近在看effective C++,看到第六部分——继承与面向对象设计,对类成员访问级别(public,protected,private)与继承的形式(public, private)的有时候会有点迷糊,这里理清一下思路。
我觉得首先要弄清楚,类的定义和类的使用。
简单来说,类的定义就是设计类里面应该有什么成员函数,什么数据,以及成员函数的实现。而类的使用是通过定义好的类来产生对象,及定义一个类的对象,便能够使用类(当然也可以是指针和引用)。
对于类成员的访问级别有public,protected,private。那么什么时候需要访问类呢?我觉得有两种情况,第一种是我定义一个类的对象,指针,引用(这也是我们说的类的使用),第二种是子类定义的时候。
对于第一种:在我们定义一个类的对象的时候,我们通过对象来发挥出类的功能,但是我们只能访问级别为public的成员函数和变量。
对于第二种:在子类的定义的时候,我们能够使用父类的public和protected成员函数和变量。
所以,private成员函数和变量只能在类自己定义的过程中使用。
那么问题来了,对于子类的对象来说,我们能访问哪些函数呢?
这里我们看看继承的形式。继承的形式常用的有两种(public和private)(一般很少用protected继承,这里不讨论了)。我们假设基类为class Base, 子类为 class Derived.
1、如果子类(Derived)通过public继承了基类Base。
Base类的访问级别 ----- public继承------ 子类对象(不是子类定义)看到的级别
public public
protected protected
private private
因此子类对象只能访问父类Base中的public 成员函数和数据。但是子类定义的过程中,我们能够使用父类的public和protected成员函数和变量。
2、如果子类(Derived)通过private继承了基类Base。
Base类的访问级别 ----- private继承------ 子类对象(不是子类定义)看到的级别
public private
protected private
private private
因此子类对象无法访问父类Base中的所有成员函数和变量。但是子类定义的过程中,我们仍然能够使用父类的public和protected成员函数和变量。
所以,我觉得在准备一个类的成员函数和变量时,一定区分清楚到底是在哪儿用?是在类的定义中(那么此时你是功能的提供者),还是类的对象(此时你是功能的使用者)。
- 关于C++类成员访问级别(public,protected,private)与继承的形式(public, private)
- 访问级别(public、protected、friendly、private)
- 关于public, private 和 protected继承中对基类成员的访问
- 类访问控制(public/protected/private)
- 关于PUBLIC、PROTECTED、PRIVATE继承
- public,private,protected的区别,继承方法与访问权限
- 类继承的方式(public、private、protected)
- C++中 public protected private 类成员的访问
- C++中 public protected private 类成员的访问
- public、private、protected属性与public、private、protected继承
- public、private、protected属性与public、private、protected继承
- public、private、protected属性与public、private、protected继承
- C++ (public, protected, private继承)
- public、private、protected继承
- public、protected、private继承
- 关于public,protected,private继承(待补充)
- C++:public继承、protected 继承、private继承
- C++:public继承、protected 继承、private继承
- 如何查看linux系统中空闲内存/物理内存使用/剩余内存
- CALayer
- Andriod 如何写欢迎界面
- Android Studio精彩案例(七)《ToolBar使用详解<一>》
- xcode更新
- 关于C++类成员访问级别(public,protected,private)与继承的形式(public, private)
- java对AD域的密码修改!!证书导入!!!
- phpstorm 激活
- Android本地存储之SharedPreferences源码解析
- java方法参数和返回值
- 打包人脸识别等出现的问题
- 记笔记的好处
- ABAP X类型 和 xstring类型
- 修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 问题