求教,子类中定义父类的一个对象,该怎么解决

求教,子类中定义父类的一个对象
#include<iostream.h>
class A
{
protected:
A(){cout<<"A Constructor"<<endl;};  //父类的构造函数为保护类型
};

class B:public A
{
public:
void show();  
};
void B::show()
{
A aa;       //编译出错问题就在这里
}

void main()
{
B b;
}

//问题、父类A的构造函数是protected类型的,子类B照理应该可以访问,为什么出错了,如果改成public就可以编译了

------解决方案--------------------
引用:
首先,你的代码简化成以下也不影响输出,因为Show()根本就没有调用。
#include<iostream.h>
class A
{
protected:
A(){cout<<"A Constructor"<<endl;}; 
};

class B:public A
{
};

void main()
{
B b;
}


造成你说提到的编译错误的原因是,父类的构造函数是不被子类所继承的。
在你的例子中,创建B,是调用父类的无参数的构造函数。

因为不被继承,所以对于父类A的构造函数 来说,来自子类B访问属于外部访问。

http://blog.163.com/lichuan0502@126/blog/static/9933534820120233332497/

+1
------解决方案--------------------
引用:
你写的那个,意思就是A对象函数里面创建了一个B对象, 
这个完全是2个不同的对象,A跟B 一点关系都没的,所以肯定不能调用保护函数。


说个更简单点的例子:

class A
{
public:
A() {}
}

class B : public A
{
public:
B() {}
}
// 1
A *a = new A();
B *b = (A*)a;  // 这样是错的, 这个a跟B有毛关系。。。

// 2
A *a = new B();
B *b = (A*)a;  // 这样才是对的吧, 这个a才是B的父类