以下是我的基類:
Vehicle
{
protected: //members being inherited。
public:
void getDetails()。
};
這是我的派生類:
這是我的派生類。
class Car : protected Vehicles
{}
現在我試圖通過我的派生類物件訪問基類的公共函式。根據我的理解,基類的公共函式是由派生類繼承的,所以它應該作業。
Car obj2;
obj2.getDetails(); /*Public func of base class*/。
但是我得到了類似的錯誤。 'Vehicle::getDetails'不能訪問,因為'Car'使用'protected'來繼承'Vehicle'
誰能解釋一下?
誰能解釋一下這個問題嗎?我錯過了什么?
uj5u.com熱心網友回復:
當Car繼承自Vehicle時,你使用了 "protected "訪問指定器。這意味著受保護的成員被繼承,但公共成員也被繼承為受保護的,因為這是你所允許的最高可訪問性級別。所以getDetails函式在Car中是受保護的,這意味著你不能在類外訪問它。 使用public來代替應該可以解決你的問題:
class Car : public Vehicle
uj5u.com熱心網友回復:
從C語言的偽OOP角度來看,你可能會更好地理解這一點
。class Car : protected Vehicle
{};
類似于
class Car
{
protected:
Vehicle車輛;//隱藏或未命名的成員。
};
呼叫
obj2.getDetails()。
可以像呼叫隱藏成員一樣成像
obj2.veh.getDetails()。
obj2.vehicle是不可訪問的,因為它是受保護的,公共的getDetails在受保護的成員中是不可訪問的。
你可以用public:或private:替換protected:,看看訪問修改器是如何作業的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/320061.html
標籤:
