读书人

调用父类结构

发布时间: 2013-06-25 23:45:42 作者: rapoo

调用父类构造


class Assist
{
protected:
HWND m_hwnd;
void Pre_Print();
public:
Assist(HWND hwnd);
};
Assist::Assist(HWND hwnd)
{
m_hwnd=hwnd;
}

class AssistGm:public Assist
{
public:
AssistGm(HWND hwnd);
};
AssistGm::AssistGm(HWND hwnd)
{
m_hwnd=hwnd;
}

//外部调用如下
AssistGm asgB(hwndB);//error:“Assist”没有合适的默认构造函数可用
asgB.Pre_Print();//error:无法访问 protected 成员

第一个错误 和父类构造有什么关系
第二个错误 随便说说吧
[解决办法]
在构造AssistGm对象时,隐式调用的是Assist()而不是Assist(HWND),正是由于显式定义了Assist(HWND),导致系统会自动生成的Assist()没有生成。所以应该显式定义一个Assist的无参构造函数。

第二个错误说明没有正确理解public,protect和private。

[解决办法]
第一个问题,你没有在子类中显示调用父类构造函数的话,会自动调用父类的默认构造函数。。而你的父类由于定义了一个带参数的构造函数,所以编译器不会自动生成默认构造函数,导致子类调用失败。可以将AssistGm的构造函数改为

AssistGm::AssistGm(HWND hwnd): Assist(hwnd)//显式调用基类构造函数
{
}

第二个问题。。外部怎么可以调用对象的protected成员。。

读书人网 >C++

热点推荐