这一小堆代码是什么意思

What does this small chuck of code mean?

本文关键字:是什么 意思 代码      更新时间:2023-10-16

我有这堆代码,如果有人能帮我提供更多关于它的信息,我将不胜感激。我知道一些编码,但不太多,所以如果这看起来很傻,请耐心等待。

class A
{
public:
    A();
};
int x, y, z;
A::A():
x(1),
y(2),
z(3)
{
    //some code here basically more variable definition
}

我不明白的是,

  1. 一个同时也是类名称的函数?即使它有效,但我为什么要这么做?

  2. x,y,z的变量定义是怎么回事?我假设调用了一些构造函数,但用正常方式定义它们有什么错?它们在冒号:之后但在函数定义之前意味着什么?

谢谢。非常感谢。

实际上,您需要一个C++教程,但这里是:

与类同名的"函数"是构造函数。其中可能有几种,每种都有不同的论点。在这种情况下,构造函数根本不接受任何参数(因此被称为默认构造函数)。并不是所有的类都有默认的构造函数,但如果你没有编写自己的构造函数,那么编译器会为你创建一个默认的构造函数。

冒号后面的位是构造函数中使用的一个特殊语法位。它被称为初始值设定项列表。实际情况是,在进入构造函数的主体之前,列出的成员变量会用这些值初始化(或者,在对象的情况下,构造函数会用这些参数调用)。如果可以的话,您应该始终使用初始值设定项列表来设置变量的值。

在这种情况下,默认构造函数指定成员变量xyz应分别初始化为123(至少我假设它们是成员变量——正如所写的,它们实际上是全局变量)。

问题中的内容不是有效的C++。

class A
{
public:
    A();
};
int x,y,z; // x,y,z are out here in the wild
// This is supposed to be the definition of the constructor of "A"
// outside the "A" class
//
// The "A::A() : " sequence introduces a list of member initializers.
A::A() :
x(1),    // <- These are not members of "A", so they cannot be initialized as members!
y(2),    // <-
z(3)     // <-
{
}

我想你的意思是:

class A
{
public:
    int x,y,z;
    A();
};
A::A() :
x(1),    // <- Now members of "A", so they can be initialized here
y(2),    // <-
z(3)     // <-
{
}