是C++的新手。C++:爲什麼基類對象在派生類中不可訪問,如果受保護
class A
{
public:
int i;
protected: //**--- [1]**
void set()
{
i=5;
cout<<i;
}
};
class B : public A
{
public:
void call()
{
A obj;
obj.set(); //**----[2]**
set(); //**---[3]**
}
};
int main()
{
B* b_obj = new B;
b_obj->call();
}
爲什麼不編譯的代碼,如果我嘗試包括[2],而不是更換[1]公共但它工作,如果我編譯包括[3]單獨?
編譯錯誤:錯誤:'void A :: set()'受保護。
總之,我的目的是瞭解爲什麼基類對象不能在派生類中調用,如果基類接口的訪問說明符被設置爲受保護的。
我相信'A'是'Pet''''''''',但這是一個瘋狂的猜測。 @OP - 請澄清。 –