tttttt@@@@@@ 发表于 2023-6-9 10:23:48

组合类,常成员与静态成员

可以帮忙讲一下吗(简单会用就可以)谢谢谢谢

isdkz 发表于 2023-6-9 10:25:53

当然可以,我很乐意帮助你理解这些概念。

1. 组合类(Composition): 组合是一种对象间的关系,意味着一个类可以包含另一个类的对象作为其成员。这是一种非常重要的方式来构建复杂的类。例如,假设我们有一个"Date"类和一个"Person"类,我们可以在"Person"类中包含一个"Date"对象,表示这个人的生日。

class Date {
public:
Date(int year, int month, int day): year(year), month(month), day(day) {}
// ...
private:
int year;
int month;
int day;
};

class Person {
public:
Person(string name, Date birthday): name(name), birthday(birthday) {}
// ...
private:
string name;
Date birthday;
};


然后,你就可以创建一个人,并指定他的生日:

Date birthday(1990, 1, 1);
Person person("Tom", birthday);


2. 常成员(Const Member): 常成员是一种特殊类型的类成员,它的值在对象创建后就不能改变。你可以通过在成员变量前面添加"const"关键字来声明一个常成员。

class MyClass {
public:
MyClass(int x): x(x) {}
// ...
private:
const int x;
};


在这个例子中, x 是一个常成员,一旦对象被创建, x 的值就不能改变。

3. 静态成员(Static Member): 静态成员是属于类的成员,而不是属于类的某个特定对象的成员。这意味着,无论你创建了多少个这个类的对象,静态成员只有一份。静态成员可以是数据成员(变量)或成员函数(方法)。

class MyClass {
public:
static int x;
// ...
};

int MyClass::x = 0;// 初始化静态成员


在这个例子中, x 是一个静态成员。所有的"MyClass"对象都共享这个 x ,并且可以通过类名直接访问它,如"MyClass::x"。

tttttt@@@@@@ 发表于 2023-6-10 07:07:44

isdkz 发表于 2023-6-9 10:25
当然可以,我很乐意帮助你理解这些概念。

1. 组合类(Composition): 组合是一种对象间的关系,意味着 ...

Person(string name, Date birthday): name(name), birthday(birthday) {}这一部分的作用和构造函数一样吗

isdkz 发表于 2023-6-10 09:37:39

tttttt@@@@@@ 发表于 2023-6-10 07:07
Person(string name, Date birthday): name(name), birthday(birthday) {}这一部分的作用和构造函数一样 ...

是的,这部分代码就是 Person 类的构造函数。构造函数是一种特殊的函数,它在创建类的新对象时自动调用。构造函数的名称与类的名称相同,并且不返回任何值。

在这个例子中, Person(string name, Date birthday)是构造函数,它接受两个参数——一个字符串和一个 Date 对象。 name(name), birthday(birthday)是初始化列表,它用来初始化类的数据成员。

初始化列表是在花括号{}之前的冒号:之后列出的,每个成员用逗号,分隔。每一个初始化都是成员名称后跟括号,括号内是用来初始化该成员的值。在这个例子中,成员name和birthday分别使用构造函数的参数name和birthday进行初始化。

在构造函数体运行之前,已经完成了数据成员的初始化。如果没有显式初始化成员变量,那么这些成员将会进行默认初始化。对于内置类型,如果没有进行显式初始化,那么其值将是未定义的。

因此,以下的代码:

Person::Person(string name, Date birthday) : name(name), birthday(birthday) {}


会创建一个 Person 对象,同时初始化其name成员为传入的name参数值, birthday成员为传入的birthday参数值。
页: [1]
查看完整版本: 组合类,常成员与静态成员