我有这些代码,如果有人可以通过提供更多有关它的信息来帮助我,我真的很感激。我知道一些编码,但不是太多,所以如果这看起来很傻,请耐心等待。
class A
{
public:
A();
};
int x, y, z;
A::A():
x(1),
y(2),
z(3)
{
//some code here basically more variable definition
}
我没有得到的是这个,
一个函数,它也是一个类的名称?即使它有效,但我为什么要这样做呢?
x,y,z的变量定义是什么。我假设正在调用一些构造函数,但是以正常方式定义它们有什么问题?
它们在冒号:
之后但在函数定义之前表示什么呢?
谢谢。非常感激。
答案 0 :(得分:1)
真的,你需要一个C ++教程,但是这里有:
与类同名的“函数”是构造函数。可以有几个,每个都采取不同的论点。在这种情况下,构造函数根本不接受任何参数(因此称为默认构造函数)。并非所有类都有默认构造函数,但如果您没有编写自己的构造函数,那么编译器将为您创建一个默认构造函数。
冒号后面的位是构造函数中使用的特殊语法。它被称为初始化列表。会发生的是,在到达构造函数的主体之前,列出的成员变量是用这些值初始化的(或者,对于对象,使用这些参数调用构造函数)。如果可以,应始终使用初始化列表来设置变量的值。
在这种情况下,默认构造函数指定成员变量x
,y
和z
应初始化为1
,2
和{ {1}}分别(至少我认为它们是成员变量 - 如同书面形式,它们实际上是全局变量)。
答案 1 :(得分:1)
您的问题所包含的内容不是有效的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) // <-
{
}