日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++之多重继承引发的重复调用

發布時間:2025/3/20 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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; }


//解決辦法:針對重復調用,每個類把屬于自己的工作單獨封裝

#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; }virtual void print(){ cout << "print R = " << r << endl;} }; //虛繼承 class A : virtual public R//virtual寫在public的前后均可以 { private:int a; public:A(int x,int y):R(x),a(y){ }protected:void fA()//增加一個保護函數,只打印自己的擴展成員{cout << "a = " << a << endl;}void f()//重寫父類的f()函數{//cout << "a = " << a << endl;fA();R::f();//r是私有成員變量,不能直接訪問,通過作用域進行訪問被派生類覆蓋的函數f()} }; //虛繼承 class B : virtual public R { private:int b; public:B(int x, int y) :R(x), b(y) {}protected:void fB()//增加一個保護函數,只打印自己的擴展成員{cout << "b = " << b << endl;}void f()//重寫父類的f()函數{fB();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;R::f();//A::f();//此時A里面有一個 r 的輸出,和輸出a//B::f();//B里面也有一個r的輸出,和輸出b//從而導致重復調用,兩次輸出 r fA();//A::fA();fB();//A::fB();}}; int main() {C cc(1212, 345, 123, 45);cc.f();system("pause");return 0; }

總結

以上是生活随笔為你收集整理的C++之多重继承引发的重复调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。