初始化类对象而不定义成员变量

时间:2017-06-08 13:11:40

标签: c++ constructor

我正在学习C ++并遇到了这样的代码,其中构造函数初始化而不声明成员变量。此外,创建的对象没有任何参数。不会调用默认构造函数吗?

此外,如果继承此类,派生类是否可以访问x和y?

//示例程序

#include <iostream>
#include <string>

class game
{
public:
    game(int x = 0, int y = 100); // Do they get defined as members?
    int z; 
};

game::game(int x, int y) : z(x)
{
    std::cout << x;   
}

int main()
{
    game g; // passed w/o parameters.
    return 0; 
}

1 个答案:

答案 0 :(得分:2)

  

此外,创建的对象没有任何参数。不会调用默认构造函数吗?

您可以按如下方式声明构造函数:

game(int x = 0, int y = 100);

实施:

game::game(int x, int y) : z(x)
{
    std::cout << x;   
}

由于您已为构造函数指定了默认参数,因此在调用时:

game g;

与调用相同:

game g {0, 100};

因为为构造函数提供了默认参数。

  

game(int x = 0, int y = 100); //他们被定义为成员。

除非您将其值设置为班级中的成员,否则他们不会被定义为成员。 xy都超出了构造函数末尾的范围。

  

此外,如果继承此类,派生类是否可以访问x和y?

不直接,您可以看到如下:

class Derived : public game
{
public:
    Derived();
};

Derived::Derived() : game(100, 100) //Or whatever arguments
{
    //...
}