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

      歡迎訪問 生活随笔!

      生活随笔

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

      c/c++

      C++(纯)虚函数重写时访问权限更改问题

      發布時間:2023/11/30 c/c++ 29 豆豆
      生活随笔 收集整理的這篇文章主要介紹了 C++(纯)虚函数重写时访问权限更改问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

      我們知道在Java中是自動實現多態的,Java中規定重寫的方法的訪問權限不能縮小。那么在C++中我們實現多態的時候是否可以更改(縮小)訪問權限呢?

      經過測試,得到的答案如下:如果用基類指針指向派生類對象實現多態則虛函數的訪問權限以基類中的訪問權限為準。因此只要基類中的訪問權限是public就可以訪問。派生類對象的訪問權限以派生類中的為準

      這就意味這我們只要基類的虛函數權限是public,我們就可以使用基類指針訪問到派生類私有的虛函數。

      具體樣例:

      #include<cstdio> #include<iostream> #include<string>using namespace std;class Employee { protected:string name, ID;Employee(string _name,string _ID):name(_name),ID(_ID){}void SetName(string _name){name = _name;}void SetID(string _ID){ID = _ID;}string GetName(){return name;}string GetID(){return ID;} public:virtual double DisplaySalary(){return 0;}virtual void DisplayInform() = 0; };class Manager :public Employee {double salary; public:Manager(string _name,string _ID,double _salary=5000):Employee(_name,_ID),salary(_salary){}double DisplaySalary(){return salary;}void DisplayInform(){cout << "經理信息:" << endl;cout << "姓名:" << name << "\tID:" << ID << "\t薪資:" << salary << endl;}void SetSalary(double _salary){salary = _salary;} };class Technician :public Employee {double wage, hours; public:Technician(string _name, string _ID, double _wage = 100,double _hours=288):Employee(_name,_ID),wage(_wage),hours(_hours){}void SetWage(double _wage){wage = _wage;}void SetHours(double _hours){hours = _hours;}double DisplayWage(){return wage;}double DisplayHours(){return hours;} private:double DisplaySalary(){return wage * hours;}void DisplayInform(){cout << "經理信息:" << endl;cout << "姓名:" << name << "\tID:" << ID << "\t薪資:" << DisplaySalary() << endl;} };int main() {Employee* p1 = new Manager("A", "01", 9000);Employee* p2 = new Technician("B", "02");Technician C("C", "03");p1->DisplayInform();p2->DisplayInform();cout << C.Employee::DisplaySalary() << endl;//直接訪問會報錯p2 = &C;cout << p2->DisplaySalary() << endl;return 0; }

      運行結果:

      總結

      以上是生活随笔為你收集整理的C++(纯)虚函数重写时访问权限更改问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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