四十三、继承与派生:赋值兼容性规则
来源:互联网 发布:视频剪辑软件推荐 编辑:程序博客网 时间:2024/04/28 14:47
派生继承自基类,这样基类对象具有的功能,派生类对象也有。这样引出了赋值兼容性规则。Derived is a Base类比Efective中的is-a章节class Base{…};class Child:public Base{…};Base base,*pBase;Child child;赋值兼容性规则:在基类对象可以使用的地方都可以用公有派生类对象代替。
根据上面规则,这里的代替有三种:
1、派生类对象赋值给基类对象。即派生类对象从基类继承成员的值分别赋值给基类对象的相应成员。
base=child;
2、派生类对象地址赋值给基类类型指针
pBase=&child
3、派生类对象初始化基类引用
Base &b=child;
这样做有很多好处,比如对基类和派生类对象做相同操作,我们只要定义一个函数就可以了(其参数为基类对象或指针引用),提高了开发效率。需要注意的是:对于公有派生类对象代替基类对象使用,我们只能使用它从基类继承的成员,新成员明显是不能使用的。#include<iostream>using namespace std;class Base{public: voidshow(){cout<<"Base::show"<<endl;}};class Child0:public Base //公有继承{public: voidshow(){cout<<"Child0::show"<<endl;}};class Child1:public Base{ public: voidshow(){cout<<"Child1::show"<<endl;}};void CallShow(Base* pBase) //参数为基类指针,这样公有派生类对象和基类对象都可以调用,提高了效率{ pBase->show();}int main(){ Base*p; //声明基类指针 Child0c0; //公有派生类对象c0 p=&c0; //派生类对象地址赋值给基类指针 CallShow(p); Child1c1; //公有派生类对象c1 CallShow(&c1); //引用作为参数 return0;}/* 输出结果Base::showBase::show*/上面我们可以看到,虽然派生类对象地址赋值给了基类指针p,但明显p只访问到从基类继承的成员show(),不会调用到派生类的show函数。也就是说虽然派生类代替了基类对象,但也只能产生基类的功能,自己功能无法体现。
如果要在代替后同样实现自己功能,就要用到“多态性”
0 0
- 四十三、继承与派生:赋值兼容性规则
- 四十、继承与派生:派生类的析构函数
- C++基础:继承与派生(声明 继承方式 访问规则)
- C++三大继承与多级派生
- C++继承与派生的访问基本规则
- 二十六、继承(三) 转换与继承、派生类到基类的转换、基类到派生类的转换
- 派生类与继承
- C++继承与派生
- C++ [ 继承与派生 ]
- 继承与派生
- 继承与派生
- 继承与派生
- 继承与派生
- C++ 继承与派生
- c++继承与派生
- 继承与派生
- 派生与继承
- c++继承与派生
- ios 数组赋值时取不到 数组赋值为空 奇葩问题
- 【golang】信号捕捉和处理
- Win32多窗口程序的创建
- Xcode导入静态库有时会出现莫名其妙的问题
- 单例传值(三个界面)
- 四十三、继承与派生:赋值兼容性规则
- 【STL源码剖析读书笔记】【第4章】序列式容器之heap和priority_queue
- jqgrid 4.8版本 Cannot read property 'decimalSeparator' of undefined 错误
- html css学习笔记-详解各种选择器
- 社説 20150516 財政健全化計画 成長頼みが過ぎては危うい
- SVM核函数
- Spark+Scala课程包
- 排序算法(Max_Heap_Sort最大堆排序)
- containsString和rangeOfString