这小块代码意味着什么?

时间:2013-11-19 07:16:17

标签: c++ class oop constructor

我有这些代码,如果有人可以通过提供更多有关它的信息来帮助我,我真的很感激。我知道一些编码,但不是太多,所以如果这看起来很傻,请耐心等待。

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的变量定义是什么。我假设正在调用一些构造函数,但是以正常方式定义它们有什么问题? 它们在冒号:之后但在函数定义之前表示什么呢?

  3. 谢谢。非常感激。

2 个答案:

答案 0 :(得分:1)

真的,你需要一个C ++教程,但是这里有:

与类同名的“函数”是构造函数。可以有几个,每个都采取不同的论点。在这种情况下,构造函数根本不接受任何参数(因此称为默认构造函数)。并非所有类都有默认构造函数,但如果您没有编写自己的构造函数,那么编译器将为您创建一个默认构造函数。

冒号后面的位是构造函数中使用的特殊语法。它被称为初始化列表。会发生的是,在到达构造函数的主体之前,列出的成员变量是用这些值初始化的(或者,对于对象,使用这些参数调用构造函数)。如果可以,应始终使用初始化列表来设置变量的值。

在这种情况下,默认构造函数指定成员变量xyz应初始化为12和{ {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)     // <-
{
}