在子类的初始化函数中如何调用父类的初始化函数

wwangzhihang100 2006-03-23 10:20:26
rt
...全文
517 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
popy007 2006-03-23
  • 打赏
  • 举报
回复
我明白了,如果我想调用父类的非初始化函数,例如
class Base {
int i;
public:
Base() {}
void ddd(){};
Base(int i) : i(i) {}
};

class Derived : public Base {
public:
Derived() {} // 默认调用Base::Base()
Derived(int i) : Base(i) {} // 显示调用Base::Base(int)
Base::ddd();
};
那么需要显示声明,如果是构造函数,就不要了
==

首先,不可以在class的declaration中明确调用一个方法,比如Base::ddd()。

你必须把它放到一个方法中,比如:

class Derived : public Base {
public:
Derived() {} // 默认调用Base::Base()
Derived(int i) : Base(i) {} // 显示调用Base::Base(int)
void f() {
ddd();
}
};

其次,可以看到,f()中的ddd()并没有给出一个scope resolving symbol(::)。

因为compiler会知道ddd是Base的。只有在下面这种容易迷惑compiler的情况下

才有必要:

class Derived : public Base {
public:
Derived() {} // 默认调用Base::Base()
Derived(int i) : Base(i) {} // 显示调用Base::Base(int)

void ddd() {}

void f() {
Base::ddd();
}
};
popy007 2006-03-23
  • 打赏
  • 举报
回复
不懂。怎么
Derived() {} // 默认调用Base::Base()
会调用父类的base呢?
使用Base::Base()才可以把
==

compiler会保证调用类层次结构上的所有object的ctor。如果没有明确

调用ctor,compiler会使用default-ctor,如果发现没有可用的default-ctor,

compiler便会给出编译期错误。
sungengyu 2006-03-23
  • 打赏
  • 举报
回复
哈哈,我犯过和楼主同样的错误。

派生类的构造函数会自动调用基类的构造函数。

你在基类和派生类的构造函数中打印出一些东西,就知道调用的顺序了。
wwangzhihang100 2006-03-23
  • 打赏
  • 举报
回复
我明白了,如果我想调用父类的非初始化函数,例如
class Base {
int i;
public:
Base() {}
void ddd(){};
Base(int i) : i(i) {}
};

class Derived : public Base {
public:
Derived() {} // 默认调用Base::Base()
Derived(int i) : Base(i) {} // 显示调用Base::Base(int)
Base::ddd();
};
那么需要显示声明,如果是构造函数,就不要了
benlei999 2006-03-23
  • 打赏
  • 举报
回复
父类的默认构造函数不需要你显示调用啊,一楼对的
wwangzhihang100 2006-03-23
  • 打赏
  • 举报
回复
不懂。怎么
Derived() {} // 默认调用Base::Base()
会调用父类的base呢?
使用Base::Base()才可以把
popy007 2006-03-23
  • 打赏
  • 举报
回复
你说的是constructor吧?这个在derived class的initialization list中完成,比如:

class Base {
int i;
public:
Base() {}
Base(int i) : i(i) {}
};

class Derived : public Base {
public:
Derived() {} // 默认调用Base::Base()
Derived(int i) : Base(i) {} // 显示调用Base::Base(int)
};

64,281

社区成员

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

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