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

初始化类对象时不定义成员变量 我正在学习C++,遇到了这个构造函数初始化而不声明成员变量的代码。此外,创建的对象没有任何参数。不会调用默认构造函数吗,c++,constructor,C++,Constructor,另外,如果这个类是继承的,那么派生类是否有权访问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

另外,如果这个类是继承的,那么派生类是否有权访问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; 
}
#包括
#包括
班级游戏
{
公众:
游戏(intx=0,inty=100);//他们被定义为成员吗?
intz;
};
游戏:游戏(整数x,整数y):z(x)
{
标准::cout
此外,创建的对象没有任何参数。是否会调用默认构造函数

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

game(int x = 0, int y = 100);
class Derived : public game
{
public:
    Derived();
};

Derived::Derived() : game(100, 100) //Or whatever arguments
{
    //...
}
以及实施:

game::game(int x, int y) : z(x)
{
    std::cout << x;   
}
这与呼叫相同:

game g {0, 100};
因为默认参数是为构造函数提供的

游戏(intx=0,inty=100);
//他们是否被定义为成员


除非将它们的值设置为类中的成员,否则它们不会被定义为成员。
x
y
在构造函数末尾都超出范围

另外,如果这个类被继承,派生类是否有权访问x和y

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

game(int x = 0, int y = 100);
class Derived : public game
{
public:
    Derived();
};

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

它们可以通过从派生类调用的基类构造函数访问x和y。由于您为构造函数的所有参数提供了默认参数,因此它将成为默认构造函数,因为它可以在不指定任何参数的情况下调用。与任何函数一样,参数的行为都是局部变量,并且超出范围一旦函数返回。构造函数也会发生这种情况。构造函数参数和构造函数局部变量都不会成为类的成员变量。
x
y
只是构造函数的参数,它们不是对象的成员。您可能想用.Oh Ok.来巩固您的理解。非常感谢。我试图使用显示函数来显示x的值。它说x没有在作用域中声明。类游戏{public:game(int x=0,int y=100);int z;void display();};int main(){game g;g.display();return 0;}非常感谢。我现在就知道了。