使用默认构造函数初始化变量

时间:2015-03-22 12:36:18

标签: c++ class constructor

我对c ++很新,我现在正在努力学习所有的基础知识, 我知道什么时候调用默认构造函数,但是当我尝试不同的语法时,它不会像我期望的那样工作。

请查看以下代码:

class a;
class b();
class c(NULL);

'class'是我用默认构造函数创建的类, 对于a和c,一切都运行良好,但对于b,它只是不会将变量识别为类成员。

我认为b和c基本相同,有什么不对? 谢谢!

3 个答案:

答案 0 :(得分:3)

不要为您的班级命名" class",因为它是保留名称。

对于C ++,如果构造函数不带参数,则使用

实例化它
Foo a;   // note, if you are using c++11, you can do Foo a{};

相反:

Foo b();

实际上做了一件完全出乎意料的事情*,并声明了一个名为b的函数,它返回一个Foo实例。

对于Foo c(null),它不会编译,因为没有默认构造函数接受参数。


*它被称为"最令人烦恼的解析" ,虽然我觉得这是夸大其词。它肯定会让你感到惊讶,但只要知道你可以在一个函数内声明一个函数原型,就应该足以删除"烦恼的"方面。

换句话说,int getMyInt();显然是放在任何函数定义之外的函数原型。但是,由于这是同样在函数定义中的情况,int getMyInt();没有做任何事情,它通常不会做......这是定义一个函数原型getMyInt返回一个整数。

答案 1 :(得分:2)

b被解释为函数的声明,不带参数并返回class类型的对象。

这称为most vexing parse 编辑:这是 最令人烦恼的解析

答案 2 :(得分:-4)

你的意思是这样的吗?你知道,NULL代表0。 void意味着没有数据。

class Cl_Test
{
private:
    int m_a;
public:
    Cl_Test(int in_a= -1) { m_a= in_a; }
};

int main(int argc, char** argv) {
    Cl_Test a;
    Cl_Test b();
    Cl_Test c(void);
    return 0; }

编辑:

我的错误:

  • “变量”b:它不是变量,而是函数声明
  • 不应该在C / C ++
  • 中传递void作为参数