当前位置:首页 > 技术知识 > 正文

多重继承的构造顺序一般可分为4步(多重继承)

摘要: 多重继承的构造顺序一般可分为4步(多重继承)HTML滑块更多继承和(多重继承)此外,HTML滑块还支持多重继承(HTML提示),...
多重继承的构造顺序一般可分为4步(多重继承)

HTML滑块更多继承(多重继承)

此外,HTML滑块还支持多重继承(HTML提示),也就是说,一个HTML滑块类可以具有两个或多个基类。

在上一个示例中,HTML滑块类只有一个基类,称为html mailto.in添加,HTML滑块还支持多个继承(HTML提示),也就是说,一个HTML滑块类可以具有两个或更多的base类。

更多的继承很容易使代码逻辑复杂和混乱,并且一直存在争议。它在中小型项目中较少使用。后来,Java,C#,PHP等只是取消了更多继承。

更多继承的语法也非常简单,并且可以使用逗号分开多个基类。例如,已经声明了A类,B类和C类

classd:publica,privateB,protectc {

//新添加的D类D成员

}

D是具有多种继承形式的HTML滑块类。它以公共方式继承A类,并以私人方式继承B类,以保护性的方式继承C类。D根据不同的继承方法在A,B和C中获得成员,以确定其在HTML Slider类中的访问权限。

在更多继承下的构造函数

多形式形式中的构造函数基本上与单个继承形式相同,但是有必要在HTML滑块类的构造函数中调用多个基类的构造函数。一个例子,构造函数d构造函数的写作是:

D(形状付款列表):A(真实点列表),B(实际便携式列表),C(实际规范列表){

//其他操作

}

基础构造函数的呼叫顺序及其在HTML滑块类构造函数中出现的顺序与声明HTML滑块类的时间顺序无关。ClassA,B,C,C和D上述上述例如,即使D类构造函数写下以下形式:

d(形状参数列表):b(实际人参列表),c(实际参数列表),A(实际参数列表){{

//其他操作

}

然后,首先调用A类A的构造函数,然后调用类型B构造函数,最后调用C类构造函数。

以下是多个继承的示例:

#包括

使用名称空间性std;

//基类

classbasea {

民众:

basea(int a,int b);

〜basea();

受保护:

int m_a;

int m_b;

};

basea :: basea(int a,int b):m_a(a),m_b(b){

称呼<< "Basea Constructor" << Endl;

}

basea :: 〜basea(){

cout<< "Basea Destructor" << Endl;

}

//基类

classhtml滑块{

民众:

html滑块(int c,int d);

〜html slider();

受保护:

int m_c;

int m_d;

};

html slider :: html slider(int c,int d):m_c(c),m_d(d){{{

cout<< "HTML SliderConStructor" << Endl;

}

html slider :: 〜html slider(){{{

cout<< "HTML SliderDerDestructor" << Endl;

}

// html滑块类

Classhidden HTML:公共Basea,公共HTML滑块{

民众:

隐藏的html(int a,int b,int c,int d,int e);

〜隐藏html();

民众:

void show();

私人的:

int m_e;

};

隐藏的html ::隐藏的html(int a,int b,int c,int d,int e):basea(a,b),html slider(c,d),m_e(e){{{{{{{{{{{{

cout<< "Hidden HTMLCONSTRUCTOR" << Endl;

}

隐藏的html ::〜隐藏html(){

cout<< "Hidden htmldestructor" << Endl;

}

void hidden html :: show(){{{

核<< m_a << "," << m_b << "," << m_c << "," << m_d << "," << m_e << endl;

}

int main(){

隐藏的htmlobj(1,2,3,4,5);

obj.show();

返回0;

}

操作结果:

basea构造函数

html sliderConstructor

隐藏的htmlconstructor

1、2、3、4、5

隐藏的htmldStructor

html sliderDestructor

basea驱动器

还可以从操作的结果中找到执行顺序和在多个继承表中构造函数的执行顺序相反。

命名冲突

当两个或多个基础课程中有同名成员时,如果您直接访问成员,则将生成名称冲突。编译器不知道使用了哪个基类。这次,您需要在成员名称::前面添加类名称和域分析符号::以指示使用哪些类成员来消除双重性。

修改上述代码,将Show()函数添加到BASEA和HTML滑块类中,然后重命名隐藏HTML类的Show()函数以显示():::

#包括

使用名称空间性std;

//基类

classbasea {

民众:

basea(int a,int b);

〜basea();

民众:

void show();

受保护:

int m_a;

int m_b;

};

basea :: basea(int a,int b):m_a(a),m_b(b){

称呼<< "Basea Constructor" << Endl;

}

basea :: 〜basea(){

cout<< "Basea Destructor" << Endl;

}

void basea :: show(){

核<< "m_a =" << m_a << Endl;

核<< "m_b =" << m_b << Endl;

}

//基类

classhtml滑块{

民众:

html滑块(int c,int d);

〜html slider();

void show();

受保护:

int m_c;

int m_d;

};

html slider :: html slider(int c,int d):m_c(c),m_d(d){{{

cout<< "HTML SliderConStructor" << Endl;

}

html slider :: 〜html slider(){{{

cout<< "HTML SliderDerDestructor" << Endl;

}

void html slider :: show(){{{

cout<< "m_c =" << m_c << Endl;

核<< "m_d =" << m_d << Endl;

}

// html滑块类

Classhidden HTML:公共Basea,公共HTML滑块{

民众:

隐藏的html(int a,int b,int c,int d,int e);

〜隐藏html();

民众:

void display();

私人的:

int m_e;

};

隐藏的html ::隐藏的html(int a,int b,int c,int d,int e):basea(a,b),html slider(c,d),m_e(e){{{{{{{{{{{{

cout<< "Hidden HTMLCONSTRUCTOR" << Endl;

}

隐藏的html ::〜隐藏html(){

cout<< "Hidden htmldestructor" << Endl;

}

void hidden html :: display(){{){

basea :: show();//调用basea类的show()函数

html slider :: show();//调用HTML滑块类的show()函数

核<< "m_e =" << m_e << Endl;

}

int main(){

隐藏的htmlobj(1,2,3,4,5);

obj.display();

返回0;

}

请注意代码61和62,我们明确指出要调用Show()函数的基类。

发表评论