c++中子类调用父类构造函数和受保护成员的有关问题
c++中子类调用父类构造函数和受保护成员的问题假设有两个类A和B:class A{protected:int mpublic:A(){}A(i
c++中子类调用父类构造函数和受保护成员的问题
假设有两个类A和B:
class A
{
protected:
int m;
public:
A()
{}
A(int n)
{m=n;}
};
class B:public A
{
private:
int n;
public:
B();
B(A a);
};
B::B(A a)
{
n=a.m;
}
结果编译时提示不能访问m。但是B不是A的子类吗?为什么在B的作用域内不能访问A的受保护变量?如何才能访问?另外,在子类的构造函数中能否像使用一般函数那样使用父类的构造函数?谢谢了! c++ 子类 构造函数
[解决办法]你写的B构造函数是无权访问A的protecded成员m的,B可以访问继承自A的m,即自己的m,但不能访问传递进来的A的m。你要使用A的m,可以提供接口来访问。
[解决办法]class A
{
protected:
int m;
public:
A()
{}
A(int n)
{m=n;}
};
class B:public A
{
private:
int n;
public:
B();
B(A a);
};
B::B(A a)
{
n=a.m; //这边访问的是对象a的m变量,m是protected无法访问。可以访问B继承的自己的m变量
//例如n = m;
}
[解决办法]3楼的方法也行不通,运行的时候B对象的m和n值是随机值。
[解决办法]protected:只允许子类及本类的成员函数访问
也就是说,你只能用子类(不是子类对象)或者是基类的成员函数访问。
你要在B的构造函数里面访问只要这么写就好了:
n = B::m;