C++学习笔记(6)——多重继承类对象的构造函数参数的传递方法

来源:互联网 发布:js object 删除元素 编辑:程序博客网 时间:2024/05/13 06:38
本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!
 
    

设计基类、派生类、子派生类,定义子派生类的对象,观察参数的传递顺序

      
代码如下:
/************************************************************************
* 多重继承(多层继承)
***********************************************************************
*/

#include 
<iostream.h>
//基类CBase
class CBase
{
    
int a;
public:
    CBase(
int na)
    
{
        a
=na;
        cout
<<"CBase constructor! ";
    }

    
~CBase(){cout<<"CBase deconstructor! ";}
    
int GetA(){return a;}
}
;

//CBase的派生类CDerive
class CDerive : public CBase
{
    
int b;
public:
    
//将参数na传递给基类CBase
    CDerive(int nb,int na):CBase(na)
    
{
        b
=nb;
        cout
<<"CDerive constructor! ";
    }

    
~CDerive(){cout<<"CDerive deconstructor! ";}
    
int GetB(){return b;}
}
;
//CDerive的派生类CSubDerive
class CSubDerive : public CDerive
{
    
int c;
public:
    
//向直接基类传递参数,不负责向间接基类传递参数
    CSubDerive(int nc,int nb,int na):CDerive(nb,na)    
    
{    
        c
=nc;
        cout
<<"CSubDerive constructor! ";
    }

    
~CSubDerive(){cout<<"CSubDerive deconstructor! ";}
    
int GetC(){return c;}
    
void show()
    
{
        
//因为是公有继承,子派生类可以访问其父类和父类的父类的公有成员函数
        cout<<"int the subderive class object : ";
        cout
<<"a = "<<GetA()<<endl;
        cout
<<"b = "<<GetB()<<endl;
        cout
<<"c = "<<GetC()<<endl;
    }

}
;

void main()
{
    CSubDerive obj(
30,20,10);

    cout
<<"call the display function of the object: ";
    obj.show();

    cout
<<" call the interface function of the object: ";
    cout
<<"a = "<<obj.GetA()<<endl;
    cout
<<"b = "<<obj.GetB()<<endl;
    cout
<<"c = "<<obj.GetC()<<endl;    
}
     
     
分析:
1.运行结果如下:
    
  
 
2.函数执行过程:
  
   
 
   上图的序号表示程序执行的流程;真正执行语句的是123的构造函数调用语句和468的执行赋值语句。
 
3.执行第9步返回到主函数中,对象的详细信息:
     
       
 
 
4.对象的成员函数的地址:
   
   
 
5. 对对象从基类继承来的成员变量的不同的访问方法:
   
    
   
    注意:obj.CSubDerive 是子派生类CSubDerive类的构造函数,而obj.CDerive和obj.CBase则是指从基类继承来的成员;对最原始的基类的访问也可以通过obj.CDerive.CBase来访问,他和obj.CBase指的是完全相同的空间。此处的访问方法,指的是在VC环境下进行跟踪运行(调用阶段)的时候使用“watch”工具查看变量时的访问方法。可以通过“watch”工具查看对象的内存空间。
 
原创粉丝点击