【1701H1】【穆晨】【171123】连续第四十四天总结

来源:互联网 发布:linux ftp命令安装 编辑:程序博客网 时间:2024/06/05 15:01

任务:冲突

冲突主要有两种情况:

(1)来自不同基类的同名成员同时出现在派生类中

来自不同类的同名成员可以用“类名::”加以区分

从类A中继承而来的同名成员可以用“A::同名成员”表示

(2)从基类继承来的成员与派生类中的新增成员同名

此时直接使用的成员是派生类中新增的同名成员//支配原则

而对基类中继承来的同名成员应使用作用域运算符

如从A类继承了y,则表示为“A::y”

class A{

protected:

    int x,y;

public:

{}

};

class B{

protected:

   int x;

public:

{}

};

class C:public A,public B{

   int y;

void show(){

     cout<<"A::x"<<A::x<<"\tB::x"<<B::x<<'\n';

     cout<<"A::y"<<A::y<<"\tC::y"<<C::y<<'\n';

虚基类:

同一个基类经过多级继承出现用“类名::”无法解决的冲突

此时在虚拟继承时,将共同基类设置为虚基类

定义格式:

class 派生类名:virtual 派生方式 基类名

    新增成员列表

class 派生类名:派生方式  virtual  基类名

    新增成员列表

虚拟继承的构造函数:

从虚基类直接或间接继承的派生类构造函数的头部,必须列出虚基类构造函数的调用,除非虚基类有缺省的构造函数

调用时,虚基类构造函数的调用先于非虚基类构造函数的调用

class A{

protected:

      int a;

public:

     A()

{

函数体

}

};

class B:public virtual A{//虚基类定义

protected:

     int b;

public:

     B():A()//虚基类的直接派生类的构造函数,列出虚基类构造函数的调用

{

函数体

}

};

class C:virtual public A{

protected:

   int c;

public:

   C():A()//虚基类构造函数的调用

{

函数体

}

};

class D:public B,public C{

    int d;

public:

    D():B(),C(),A()//虚基类的间接派生类的构造函数,列出其基类和虚基类构造函数的调用

{

 函数体

}

};

……

阅读全文
0 0
原创粉丝点击