再来回顾下继承派生的语法。

继承方式显示有三种(public, protected, privatez),隐式默认private。所谓继承方式,是指派生类对基类成员的访问权限控制。

派生类构造函数定义的一般格式如下:

派生类名(参数总表):基类名1(参数表1),...,基类名m(参数表m),
成员对象名1(成员对象参数表1),...,成员对象名n(成员对象参数表n)
{
派生类新增成员的初始化;
}

构造函数调用次序:

.调用基类构造函数
.调用内嵌成员对象的构造函数
.派生类自己的构造函数

示例:

 #include <iostream>
using namespace std; class A {
private:
int l1, l2;
public:
A(int l1 = , int l2 = ) :l1(l1), l2(l2) {}
void show() {
cout << "I'm A." << endl;
}
};
class B {
private:
int lv1, l2;
public:
B(int lv1 = , int l2 = ) :lv1(lv1), l2(l2) {}
void show() {
cout << "I'm B." << endl;
}
};
class C: public A, public B{
private:
int lv1, lv2;
A ta;
public:
C(int r1, int r2, int r3, int r4, int r5, int r6, int r7, int r8) :A(r1, r2), B(r3, r4), ta(r5, r6) {
this->lv1 = r7;
this->lv2 = r8;
}
void show() {
cout << "I'm C." << endl;
A::show();
B::show();
}
}; int main() {
C tc(, , , , , , , );
tc.show();
return ;
}

假若多个基类拥有相同名称的成员x,而此时派生类去调用x,系统无法判断去调哪个基类的x,由此产生二义性。解决方式可以是成员名限定(eg:A::show();)或者成员重定义(同名覆盖,如上例的C::show())。

最新文章

  1. 【JavaScript】ArtTemplate个人的使用体验。
  2. js日期计算及快速获取周、月、季度起止日,获取指定日期周数以及星期几的小例子
  3. has_many :through VS has_and_belongs_to_many
  4. C语言 百炼成钢14
  5. 安装PL/SQL Developer 遇到的问题及解决方法
  6. [C# 基础知识系列]专题一:深入解析委托——C#中为什么要引入委托
  7. Json之语法,格式
  8. Linux下配置VNC
  9. hdu1002
  10. javascipt : reduce
  11. 记一次使用Node.js electron打包网站的记录
  12. 自制Linux重命名命令
  13. Android的Context Manager(服务管理器)源码剖析-android学习之旅(99)
  14. java equals和tostring
  15. vue的登陆验证及返回登录前页面实现
  16. KMP替代算法——字符串Hash
  17. 关于windows 7 安装Django和基本使用命令
  18. AHOI中国象棋(dp)
  19. linux下的C语言程序设计
  20. 大数据系列之分布式计算批处理引擎MapReduce实践-排序

热门文章

  1. 人生苦短之我用Python篇(遍历、函数、类)
  2. node.js之npm库
  3. 使用MS VS的命令来编译C++程序
  4. Microsoft Office Visio 2013 (安装 + 激活)
  5. LG3195 [HNOI2008]玩具装箱TOY
  6. 【模板】NOIP模板汇总
  7. webstorm设置修改文件后自动编译并刷新浏览器页面
  8. jvm是怎样调用方法的
  9. 处理mysql主从中断
  10. Verilog中的UDP