C++派生类继承的理解

 1 #include<iostream>
 2 using namespace std;
 3 class Base{
 4     public:
 5         Base()
 6         {
 7             a=5;
 8             cout<<"Base a="<<a<<endl;
 9         }
10     protected:
11         int a;//如果这里是私有的变量,则在他的所有派生类中都不具有访问权限
12         //派生类只能直接访问基类 的公有和保护成员
13         //私有成员仅限于自己使用。
14         //保护成员则允许派生类使用,而不允许通过对象进行直接调用
15         //公有类是允许所有的调用
16 };
17 class Base1:virtual public Base{
18     public:
19         int b1;
20         Base1()
21         {
22             a=a+10;
23             cout<<"Base1 a="<<a<<endl;
24         }
25 };
26 class Base2:virtual public Base{
27     public:
28         int b2;
29         Base2()
30         {
31             a=a+20;
32             cout<<"Base2 a="<<a<<endl;
33         }
34 };
35 class Derived:public Base1,public Base2{
36     public:
37         int d;
38         Derived()
39         {
40             cout<<"Base1::a="<<Base1::a<<endl;
41             cout<<"Base2::a="<<Base2::a<<endl;
42         }
43 };
44 //定义虚基类是对同一个基类只复制一次。
45 //从本例函数执行结果看出:
46 //由Derived类的创建,会导致Base1类的创建,然后是Base2的创建
47 //要创建Base1类必先创建他的派生类Base
48 //Base类创建后接着Base1创建,然后此时Base类被调用了一次
49 //Base1类创建结束后再创建Base2.
50 //因为是虚继承,Base已经被调用过一次,此时它不再调用Base类
51 //Base2会用在Base1创建的基础上调用的Base类的值。
52 //在所有的基类被依次创建后,然后再创建 最底层的派生类Derived
53 int main()
54 {
55     Derived obj;
56     return 0;
57 }
58 /*
59 在虚继承时的执行结果
60 Base a=5
61 Base1 a=15
62 Base2 a=35
63 Base1::a=35
64 Base2::a=35
65 */
66 /*
67 在非虚继承时执行的结果
68 Base a=5
69 Base1 a=15
70 Base a=5
71 Base2 a=25
72 Base1::a=15
73 Base2::a=25
74 */ 
时间: 2024-10-24 20:38:10

C++派生类继承的理解的相关文章

从设计基类及其派生类看继承关系

继承能够定义可重用.扩展或修改父类行为的子类.但基类的静态构造函数.实例构造函数和析构函数不能被派生类继承. 在下面实例中,定义一个基类Publication用于表示任何类型的出版物以及派生至Publication的其他类型Book类,由此也可以扩展为定义其他类型如:Magazine.Journal.Newspaper和Article. 在设计基类Publication时我们必须考虑到如下关系: 1.要在基类中添加哪些成员 2.基类是否用作派生类模板的抽象基类 3.类层次结构的扩展空间大小,要开

类继承小总结

类继承的功能:1,在已有类的基础上添加功能.2, 可以给类增加数据.eg:对于一个表示人的类,可以派生一个类,添加人是否可以飞行这个数据成员(bool canfly:)3,可以修改类方法的行为. 成员初始化语法:对于以下的类,可以有两种定义构造函数的方法: 1 class TableTennisPlayer 2 { 3 private: 4 string firstname; 5 string lastname; 6 bool hasTable; 7 public: 8 TableTennisP

C++ Primer 学习笔记_66_面向对象编程 -定义基类跟派生类[续]

面向对象编程 --定义基类和派生类[续] 四.virtual与其他成员函数 C++中的函数调用默认不使用动态绑定.要触发动态绑定,必须满足两个条件: 1)只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定. 2)必须通过基类类型的引用或指针进行函数调用. 1.从派生类到基类的转换 因为每个派生类对象都包含基类部分,所以可以将基类类型的引用绑定到派生类对象的基类部分可以用指向基类的指针指向派生类对象: void print_total(const Item_

C++中的基类和派生类

转载自:http://www.cnblogs.com/sujz/archive/2011/05/12/2044365.html 派生类的继承方式总结: 继承方式 说明 public 基类的public和protected的成员被派生类继承后,保持原来的状态 private 基类的public和protected的成员被派生类继承后,变成派生类的private成员 protected 基类的public和protected的成员被派生类继承后,变成派生类的protected成员 注:无论何种继承方

【转载】C++中的基类与派生类

转自:http://www.cnblogs.com/sujz/articles/2044365.html 派生类的继承方式总结: 继承方式 说明 public 基类的public和protected的成员被派生类继承后,保持原来的状态 private 基类的public和protected的成员被派生类继承后,变成派生类的private成员 protected 基类的public和protected的成员被派生类继承后,变成派生类的protected成员 注:无论何种继承方式,基类的privat

C++中的基类与派生类

派生类的继承方式总结: 继承方式 说明 public 基类的public和protected的成员被派生类继承后,保持原来的状态 private 基类的public和protected的成员被派生类继承后,变成派生类的private成员 protected 基类的public和protected的成员被派生类继承后,变成派生类的protected成员 注:无论何种继承方式,基类的private成员都不能被派生类访问.从上面的表中可以看出,声明为public的方法和属性可以被随意访问:声明为pro

C++_派生类的构造函数及派生类和基类之间的特殊关系

派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. 1 //声明一个基类 2 class TableTennisPlayer 3 { 4 private: 5 string firstname; 6 string lastname; 7 bool hasTable; 8 9 public: 10 TableTennisPlayer(); 11 void Name() const; 12 bool HasTable() c

C#-派生类

VS派生类 继承.派生类 class AClass : FClass 构建函数继承 public classname (string astring): base(astring){};默认不继承基类的构建函数.基类的在前面执行,然后执行派生类构建函数中的代码. 多态性 http://www.cnblogs.com/zhangkai2237/archive/2012/12/20/2826734.html 即看对象变量引用的是哪个类的实例,优先用对应类的方法,如果没有,到基类找. 一说同名操作,有

基类,派生类,内存分配情况?.xml

pre{ line-height:1; color:#1e1e1e; background-color:#d2d2d2; font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;} .selfFuc{color:#800080;} .bool{color:#d2576f;} .condition{color:#000080;font-weight:bold;} .key{color:#000080;} .