问一个构造和析构的小问题

kpaxstudio 2004-08-11 09:19:44
class a
{
public: a(int p){};
~a(){};
};
class b
{
public:
b(int p):aa(p) /*为什么会显示aa is not base or member ,但是去掉:aa(k)就能建立aa对象??? 或者在构造函数外建立也可以用,如代码1 */
{
a aa(p);}
//protected:a aa(p) <-代码1
}


希望各位指导,谢谢。
...全文
132 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fj2003a 2004-08-11
  • 打赏
  • 举报
回复
b没有继承a,当然不行。
而第二种情况是声明一个a的公有(Public)对象,当然通过编译了!
修改如下:
class a
{
public: a(int p){};
~a(){};
};
class b:a
{
public:
b(int p):a(p) /*为什么会显示aa is not base or member ,但是去掉:aa(k)就能建立aa对象??? 或者在构造函数外建立也可以用,如代码1 */
{
a aa(p);}
//protected:a aa(p) <-代码1
}
doolin 2004-08-11
  • 打赏
  • 举报
回复
a aa(p);
这样的语句在头文件中是编译通不过的
你的初始化没问题,问题出在a的定义。注意为a定义缺省构造函数
lemon520 2004-08-11
  • 打赏
  • 举报
回复
to Jinhao(辣子鸡丁)(不知被考试强奸多少次)

你不要乱顶哟!
我遭得住!!!!!!!!!!!
alexwhu 2004-08-11
  • 打赏
  • 举报
回复
我再一个教程里面看到这个例子了,是讲多态性的问题,上面讲的是B继承A后的一些问题,所以我觉得搂住是不是写错了
kpaxstudio 2004-08-11
  • 打赏
  • 举报
回复
呵呵,谢谢各位。
Jinhao 2004-08-11
  • 打赏
  • 举报
回复
喷血,俺顶你
b(int p):aa(p)
{
a aa(p); //这个aa不是b的成员,所以上面的aa就错了
}
idll 2004-08-11
  • 打赏
  • 举报
回复
aa是对象成员,不能在初始化列表里初始化。只有在构造函数中NEW,然后在西够中DELETE
alongfly 2004-08-11
  • 打赏
  • 举报
回复
aa是哪个对象?
加上
private:
a aa;
的声明吧
lemon520 2004-08-11
  • 打赏
  • 举报
回复
你在构造函数内创建对象当然可以,不过构造函数结束了你创建的对象也玩完了
在初始化列表里面初始化的东西要么是成员,要么是基类子对象。而你的b类里面啥都没有,当然不能初始化了
renheihei 2004-08-11
  • 打赏
  • 举报
回复
你的aa不是b的一个成员,当然能在初始化列表里使用了?!
kpaxstudio 2004-08-11
  • 打赏
  • 举报
回复
to2楼:并不是继承的关系,只是b类用a类创建对象而已
to3楼: 我也知道这样做可以通过,不过我不懂为什么在构造内这样做就不可以,而构造函数内也是可以创建对象的

谢谢
lemon520 2004-08-11
  • 打赏
  • 举报
回复
这样:
class a
{
public: a(int p){};
~a(){};
};
class b
{
public:
b(int p):aa(p){}
private: //或者protected:
a aa;
}
wyystxl 2004-08-11
  • 打赏
  • 举报
回复
你的B类是不是继承A类?
代码好象问题多多,不懂

64,654

社区成员

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

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