我正在学习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;
}
答案 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);
//他们被定义为成员。
除非您将其值设置为班级中的成员,否则他们不会被定义为成员。 x
和y
都超出了构造函数末尾的范围。
此外,如果继承此类,派生类是否可以访问x和y?
不直接,您可以看到如下:
class Derived : public game
{
public:
Derived();
};
Derived::Derived() : game(100, 100) //Or whatever arguments
{
//...
}