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

调用父类结构

2013-06-25 
调用父类构造class Assist{ protected:HWND m_hwndvoid Pre_Print() public:Assist(HWND hwnd)}Assist

调用父类构造


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成员。。

热点排行