一个关于继承的问题。
sr388 2002-05-26 10:11:40 原程序很短,很简单,不会浪费你太多的时间,请先看看。
#include <iostream.h>
class xSize
{
public:
xSize():itsSize(0) {}
xSize(int size):itsSize(size) {}
~xSize(){}
virtual int GetSize() {return itsSize ;}
virtual void PrintError()
{ cout << "Size error. Received: " << itsSize << endl ; }
protected:
int itsSize ;
};
class xTooSmall : public xSize
{
public:
xTooSmall(int size):itsSize(size) {}
virtual void PrintError()
{
cout << "Too small! Received: " ;
cout << itsSize << endl ;
}
};
int main()
{
xTooSmall MyObject(5) ;
MyObject.PrintError() ;
return 0 ;
}
编译时,VC6提示:
error C2614: 'xTooSmall' : illegal member initialization: 'itsSize' is not a base or member
Error executing cl.exe.
test.obj - 1 error(s), 0 warning(s)
本意:使用xTooSmall MyObject(5)创建一个xTooSmall对象,当创建xTooSmall对象时,基类xSize的默认构造函数:xSize():itsSize(0) {} 将被调用,基类中的成员变量itsSize被初始化为0。接着,派生类构造函数: xTooSmall(int size):itsSize(size) {}被调用,将实参5赋给派生类的成员变量:itsSzie --> 这个成员变量是从基类xSize中继承的。逻辑上来说,程序应该是没什么问题,protected对派生类可见,那么xTooSmall将继承基类的itsSize成员变量,但编译程序提示[成员变量初始化非法],怎么回事?小弟想了很久也想不透...
请大侠指点迷津,谢谢。