类继承和类组合(内嵌类)初始化的不同
来源:互联网 发布:怎么取消淘宝延迟收款 编辑:程序博客网 时间:2024/04/30 02:36
为了说明方便,暂时设有下面三个类:
public: A(int i);private: int a;};class B{public: B(int i);private: int b;};class C:public A{public: C(int i,int j);private: int c;};
类C是从类A继承过来的,那么类C的构造函数就应该这样写:
C::C(int i,int j):A(i){ c=j;}
但是,如果类C中多了一个private变量——B的对象的话,如下,所以C定义
class C{public: C(int i,int j);private: int c; B b;};
那么此时C的定义就应该是:
C::C(int i,int j):b(i){ c=j;}
比较两种情况下C的构造函数的区别,我们就会发现,在继承的时候,子类的构造函数应该包括“基类所需的形参”,因此“:”之后是“基类名(基类参数)”,即“A(i)”。但是,如果是类组合的话,子类的构造函数应该包括“对象成员所需要的形参”,因此“:”之后是“对象名(参数)”即“b(i)”。注意到这些这话,我们才可以写一个包括继承并且含有内嵌对象的类的构造函数了。设类C定义如下:
class C:public A{public: C(int i,int j,int k);private: int c; B b;};
构造函数如下:
C::C(int i,int j,int k):A(i),b(j){ c=k;}
务必要注意,什么时候是类名,什么时候是对象名。
可以这样记着:
类组合的时候,假设类B中包括类A的对象,那么在类B的构造函数中必须要有类A对象的声明,并且,声明的时候应该是
B::(int x,int y):a(x)而不是
B::(int x,int y):A(x)
而如果是继承的时候,假设类B是类A的子类,那么构造函数应该是
B::(int x,int y):A(x)而不是
B::(int x,int y):a(x)
- 类继承和类组合(内嵌类)初始化的不同
- 继承和类的组合/内嵌对象初始化
- C++中组合和继承的初始化
- C++中组合和继承的初始化
- 类的继承和组合
- 类的继承和组合
- 类的组合和继承
- 类的继承和组合
- 原型链和构造函数技术组合到一起的组合继承(类继承)
- C++中类的继承和组合
- 关于类的组合和继承
- C++ 类的继承和组合
- C++中的类的继承和组合
- 类的继承/组合
- 继承类的初始化
- 类继承和对象组合
- 类的继承与组合
- 类的继承与组合
- android系统信息(内存、cpu、sd卡、电量、版本)获取
- int型和char型数据 以及int 与string的相互转换
- “记住密码“功能的正确设计
- 室内定位技术(三)——自有定位技术
- 其实,异常并不是那么难理解。——你不知道的异常(一)
- 类继承和类组合(内嵌类)初始化的不同
- 向上取整向下取整
- 对android软件进行系统升级
- acm中国剩余定理
- intel DPDK----一次颇为打击人的串讲
- C++标准库:智能指针auto_ptr
- 动态队列,链式队列 + 示意图
- Unix环境高级编程学习笔记(一) 初窥
- C++中模板的使用