C++之多重继承

来源:互联网 发布:vs2017 golang 编辑:程序博客网 时间:2024/04/28 11:22

当子类继承于多个父类时,有以下两种情况存在,称之为多重继承



                                         

// Multi_Inherit.cpp : Defines the entry point for the console application.//多重继承#include "stdafx.h"#include<stdlib.h>#include<iostream>using namespace std;//父类中同名函数如何区分class A {//父类Aprivate:int a;public:A(int i):a(i){}void print(){cout << "父类A: " << a << endl;}};class B//父类B{private:int b;public:B(int j):b(j){}void print(){cout << "父类B: " << b << endl;}};class C :public A, public B{private:int c;public:C(int i,int j,int k):A(i),B(j),c(k){}void get_ab(){A::print();B::print();}};int main(){C x(5, 8, 10);x.get_ab();//子类C中既有父类A中的print()函数,又有父类B的print()函数,所以调用时不知道//调用哪个父类的print()函数//x.print();  //error C2385: ambiguous access of 'print'system("pause");    return 0;}

通过明确指明作用域解析符号进行区分

x.A::print();//指明调用A的print()函数


对于上面右边的图中我们称之为菱形继承

//菱形继承#include "stdafx.h"#include<stdlib.h>#include<iostream>using namespace std;class R//祖先类{private:int r;public:R(int anInt):r(anInt){}void printOn()const{cout << "r = " << r << endl;}};//父类class A :public R{private:int a;//父类A会有一份rpublic:A(int i,int j):R(i),a(j){}};//父类class B :public R{private:int b;//父类B会有一份rpublic:B(int i, int j) :R(i), b(j) {}};//子类class C :public A, public B{private:int c;//子类C会有两份r,一份来自A,一份来自Bpublic:C(int i,int j,int k):A(i,j),B(i,j),c(k){}};int main(){R rr(10);A aa(20, 30);B bb(40, 50);C cc(5, 7, 9);rr.printOn();aa.printOn();bb.printOn();//cc.printOn(); ///error C2385: ambiguous access of 'printOn'system("pause");return 0;}


1 0
原创粉丝点击