继承的成员,为什么不能初始化?

中才德创 2009-06-20 04:17:57
class Point2d
{
public:
float _x;
float _y;
};

class Point3d : public Point2d
{
public:
Point3d(float x=0.0f, float y=0.0f, float z=0.0f)
: _x(x), _y(y), _z(z)
/*
报以下错
error C2614: 'Point3d' : illegal member initialization: '_y' is not a base or member
error C2614: 'Point3d' : illegal member initialization: '_x' is not a base or member

问题一:
_x和_y是继承的成员,为什么不能初始化?
*/
{
}
float _z;
};

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
...全文
258 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2009-06-20
  • 打赏
  • 举报
回复
要明白基类的成员虽然是包含在派生类对象的,但是它并不是派生类的直接成员
zizhuchuangxin 2009-06-20
  • 打赏
  • 举报
回复
学习了 多谢
jtujtujtu 2009-06-20
  • 打赏
  • 举报
回复
只能初始化自己的成员
对于基类的成员调用基类的拷贝构造函数
譬如可以
class Point3d : public Point2d
{
public:
Point3d(float x=0.0f, float y=0.0f, float z=0.0f)
: Point2d(x,y), _z(z)
{
}
float _z;
};
pathuang68 2009-06-20
  • 打赏
  • 举报
回复
2楼代码很好,3楼总结得很好。
  • 打赏
  • 举报
回复
不多说了。
基类的数据,别放到子类的初始化列表,你只能调用基类的构造去初始化。
「已注销」 2009-06-20
  • 打赏
  • 举报
回复
#include <iostream>

class Point2d
{
public:
Point2d(float x, float y) : _x(x), _y(y)
{
}
float _x;
float _y;
};

class Point3d : public Point2d
{
public:
Point3d(float x = 0.0f, float y = 0.0f, float z = 0.0f)
: Point2d(x, y), _z(z)
/*
报以下错
error C2614: 'Point3d' : illegal member initialization: '_y' is not a base or member
error C2614: 'Point3d' : illegal member initialization: '_x' is not a base or member

问题一:
_x和_y是继承的成员,为什么不能初始化?
*/
{
}
float _z;
};

int main(int argc, char* argv[])
{
return 0;
}
adventurelw 2009-06-20
  • 打赏
  • 举报
回复
因为_x,_y的初始化是在Point2d对象生成时进行的,初始化列表只能使用在基类和成员上,继承的是接口,不是成员。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧