当前位置:  开发笔记 > 编程语言 > 正文

C++类默认构造函数

如何解决《C++类默认构造函数》经验,为你挑选了1个好方法。

早些时候我问为什么这被认为是坏的:

class Example
{
 public: 
  Example(void);
  ~Example(void);
  void f() {}
}

int main(void)
{
 Example ex(); // <<<<<< what is it called to call it like this?

 return(0);
}

现在,我知道它正在创建一个函数原型而不是返回一个类型的示例.我仍然不明白为什么它可以在g ++和MS VC++中工作.

我的下一个问题是使用上述问题,这个电话会有效吗?

int main(void)
{
 Example *e = new Example();

 return(0);
}

?有什么区别,只需调用Example e()??? 就像我知道它是一个函数原型,但似乎有些编译器会原谅并允许它调用默认的构造函数?我也试过这个:

class Example
{
 private:
  Example();

 public:
  ~Example();
};

int main(void)
{
 Example e1(); // this works
 Example *e1 = new Example(); // this doesn't

 return(0);
}

所以我有点困惑:(对不起,如果这被问了一百万次.



1> Johannes Sch..:

丹尼尔,这很简单:

Example *e = new Example();

这看起来不像一个名为"Example"的函数,是吗?函数具有返回值,名称和参数.以上怎么样?

例e1(); //这个有效

是的,因为你不创建任何Example地方的任何实例.你只需告诉代码在某个地方有一个在周围命名空间中定义的函数,你可能想调用那个函数.是的,为了返回Example的对象,确实会生成一个实例.但这并不意味着在那一点上制作了一个实例.而是在调用它时在函数中创建一个实例.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有