C++之多重继承引发的重复调用
生活随笔
收集整理的這篇文章主要介紹了
C++之多重继承引发的重复调用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
using namespace std;class R//祖先類
{
private:int r;
public:R(int x = 0):r(x){}void f(){cout << " r = " << r << endl;}void print(){cout << "print R = " << r << endl;}
};
//虛繼承
class A : virtual public R
{
private:int a;
public:A(int x,int y):R(x),a(y){}//重寫父類的f()函數void f(){cout << "a = " << a << endl;R::f();//r是私有成員變量,不能直接訪問,通過作用域進行訪問被派生類覆蓋的函數f()}
};
//虛繼承
class B : virtual public R
{
private:int b;
public:B(int x, int y) :R(x), b(y) {}//重寫父類的f()函數void f(){cout << "b = " << b << endl;R::f();//r是私有成員變量,不能直接訪問,通過作用域進行訪問被派生類覆蓋的函數f()}
};
class C :public A, public B
{
private: int c;
public:C(int x,int y,int z,int m):R(x),A(x,y),B(x,z),c(m){ }void f(){cout << "c = " << c << endl;A::f();//此時A里面有一個 r 的輸出,和輸出aB::f();//B里面也有一個r的輸出,和輸出b//從而導致重復調用,兩次輸出 r }};
int main()
{C cc(1212, 345, 123, 45);cc.f();system("pause");return 0;
}
//解決辦法:針對重復調用,每個類把屬于自己的工作單獨封裝
總結
以上是生活随笔為你收集整理的C++之多重继承引发的重复调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++之菱形继承的解决之道
- 下一篇: C++之异常处理