<一>继承的基本意义
2023-02-18 16:33:45 时间
1:继承的本质和原理
2:派生类的构造过程
3:重载,覆盖,隐藏
4:静态绑定和动态绑定
5:多态,vfptr,vftable
6:抽象类的设计原理
7:多重继承以及问题
8:虚基类 vbptr 和vbtable
9:RTTI
10:C++四种类型强转
继承的本质和原理
1:代码的复用
类和类之间的关系
组合: a part of ..... 一部分的关系
继承: a kind of ..... 一种的关系
//代码1:
class A{
public:
int ma;
protcted:
int mb;
private:
int mc;
}
class B{
public:
int md;
int ma;
potected:
int me;
int mb;
private:
int mf;
int mc;
}
代码2:
class A{
public:
int ma;
protcted:
int mb;
private:
int mc;
}
//B继承 A,
class B : public A{
public:
int md;
potected:
int me;
private:
int mf;
}
如上图,B继承A,那么B中对A 的ma ,mb,mc 的访问方式是怎么样的?能否访问?如下
class B : public A{
public:
int md;
void f(){
cout<<ma<<endl ; // ??????
}
potected:
int me;
private:
int mf;
}
1:父类的私有成员,子类不管是public,protected,private 哪种方式继承,子类中都是不可见的(注意不是private)
2:外部只能访问public成员,protected和private 的成员无法直接访问
3:在继承结构中,派生类从基类可以继承过来private成员,但是派生类中是看不见的(无法直接访问)
4:protected和private的区别?在基类中定义的成员,想被派生类访问,不想被外部访问,那么在基类
把相关成员定义成protected的,如果派生类和外部都不打算访问,那么在基类中,就把想关成员定义成private私有的
看下面继承方式
class A{
public:
int ma;
protcted:
int mb;
private:
int mc;
}
//B私有 继承 A,
class B : private A{
public:
int md;
potected:
int me;
private:
int mf;
}
class C : public B{
public:
void function(){
ma,mb ,mc md, me,mf ;的访问权限是什么?
ma 在 A 中是共有成员 -> 到B中 变成私有成员了 -》 C 中就不可见了
mb 在 A 中是保护成员 -> 到B中 变成了私有成员了-> c 中不可见
mc 在 A 中是私有成员 -> 到B中 不可见 -> C中也不可见
md 在 B 中四 共有成员 -> C中还是共有 -> main(外部)可访问
me 在 B 中四 保护成员 -> C中还是保护(C中可访问) -> main(外部)不可访问
mf 在 B 中四 私有成员 -> C中不可见 -> main(外部)不可见
}
}
默认的继承方式是什么?
要看派生类是用class定义的还是struct定义的?
class定义的派生类,默认继承方式是private私有的
struct定义的派生类,默认继承方式是public的
相关文章
- Redis中scan命令实战
- [Nginx] 博客园出现了502错误该怎么追查原因
- [MySQL] myisam比innodb查询过程效率探究
- [MySQL]myisam表的索引结构以及查询过程
- [MySQL] innodb表为varchar字段建立索引后的查询过程
- [MySQL] 联合索引最左前缀原则的原因
- [日常] 浏览器前进后退与数据结构的思想
- [PHP] 判断两个数组是否相同
- [PHP] 使用strace排查接口响应速度慢过程
- [PHP] 504 Gateway Time-out处理流程
- [设计模式] 五种创建型设计模式特点
- [设计模式] 设计模式中的七大原则
- [MySQL] mysql 5.5和 5.6 timestamp default 默认值CURRENT_TIMESTAMP问题
- [前端系列] jquery的on事件实现hover函数效果
- [MySQL] mysql优化实例-delete数据不会减少数据文件大小
- [MySQL] mysql优化实例-为join表关联字段增加索引
- 侧边悬浮在线客服咨询按钮-在线客服按钮代码实现
- [前端系列] 解决默认样式-用户代理样式表问题
- [MySQL系列] mysql find_in_set搜索以逗号分隔的字符串
- [前端系列] 解决el-table导致TypeError: this.$el.querySelectorAll is not a function