首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++中子类调用父类构造函数和受保护成员的有关问题

2013-02-24 
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;
}

[解决办法]
引用:
C/C++ code?12345678910111213141516171819202122232425class A{protected:    int m;public:    A()    {}    A(int n)    {m=n;}};  class B:public A{private:    int n;public:    B();    B(A a);……
3楼的方法也行不通,运行的时候B对象的m和n值是随机值。
[解决办法]
protected:只允许子类及本类的成员函数访问
也就是说,你只能用子类(不是子类对象)或者是基类的成员函数访问。
你要在B的构造函数里面访问只要这么写就好了:
n = B::m;

热点排行