使用默认构造函数初始化对象

Initialization of object with default constructor

本文关键字:初始化 对象 构造函数 默认      更新时间:2023-10-16

可能重复:
最令人烦恼的解析:为什么不;t A A((((;工作
使用((或不使用创建对象之间的差异

有这样的代码:

class MojaKlasa{
public:
  MojaKlasa(){}
  MojaKlasa(int i){}
  void fun(){}
};
int main()
{
  MojaKlasa a;
  a.fun();
  MojaKlasa b(1);
  b.fun();
  MojaKlasa c(); //  initialize with default constructor
  //c.fun(); error: request for member ‘fun’ in ‘c’, which is of non-class type ‘MojaKlasa()’
  return 0;
}
  • 为什么对象c出现错误
  • 怎样才能使它发挥作用
  • MojaKlasa c((的真正含义是什么?它是函数声明符吗
MojaKlasa c();

这声明了一个名为c的函数返回MojaKlasa,它不是一个对象声明。如果你想声明一个本地对象,你需要省略括号。编译器必须将这种形式解释为函数声明,这只是一条语言规则。

MojaKlasa c;
MojaKlasa c();

定义了一个返回MojaKlasa对象的函数。

MojaKlasa c;

定义了MojaKlasa类型的对象c。