c++在子类中用父类对象访问父类protected成员
子类中通过父类的类名作用域调用父类的protected成员变量是不可以的子类中通过父类的对象调用父类的protected成员变量是不可以的子类中直接用父类的protect...
子类中通过父类的类名作用域调用父类的protected成员变量 是不可以的
子类中通过父类的对象调用父类的protected成员变量 是不可以的
子类中直接用父类的protected成员变量是可以的
如:
class Base//基类
{
public:
Base(int b):b_(b){}
protected:
int b_;
}
class Derived : public Base//子类
{
public:
void Test()
{
A a(1);
a.b_ = 100; //error C2248: “A::b_”: 无法访问 protected 成员(在“A”类中声明)
A::b_ = 100; //error C2597: 对非静态成员“A::b_”的非法引用
b_ = 100; //正确通过
}
}
那么谁能帮我解释以下 这两个报错的详细原因是什么
protected的成员变量在本类和其子类可以直接用,当用父类对象,在父类外以及其子类外调用其protected成员时报错我理解,但是父类对象在其子类中调用父类中的protected成员变量也不行是为什么呢。
上面代码有误。。 A就是Base B就是Derived 展开
子类中通过父类的对象调用父类的protected成员变量 是不可以的
子类中直接用父类的protected成员变量是可以的
如:
class Base//基类
{
public:
Base(int b):b_(b){}
protected:
int b_;
}
class Derived : public Base//子类
{
public:
void Test()
{
A a(1);
a.b_ = 100; //error C2248: “A::b_”: 无法访问 protected 成员(在“A”类中声明)
A::b_ = 100; //error C2597: 对非静态成员“A::b_”的非法引用
b_ = 100; //正确通过
}
}
那么谁能帮我解释以下 这两个报错的详细原因是什么
protected的成员变量在本类和其子类可以直接用,当用父类对象,在父类外以及其子类外调用其protected成员时报错我理解,但是父类对象在其子类中调用父类中的protected成员变量也不行是为什么呢。
上面代码有误。。 A就是Base B就是Derived 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询