📅  最后修改于: 2023-12-03 15:13:58.950000             🧑  作者: Mango
C++中的结构和类是两种类型的自定义数据类型,它们用于封装多个数据成员。本文将从以下几个方面介绍C++中的结构和类:
在C++中,结构体和类的定义方式类似,我们可以使用 struct
和 class
关键字来定义结构体和类。
struct Student {
int id;
char name[20];
int age;
};
class Person {
public:
int age;
char name[20];
void print() {
cout << "name: " << name << ", age: " << age << endl;
}
};
在上面的代码中,我们定义了一个 Student
结构体和一个 Person
类,它们都有多个数据成员。注意 Person
类中 print
函数的声明方式,它使用了 public
访问修饰符,表示该函数是公有成员,在类外部可以调用。
结构和类的初始化方式也很类似,我们可以使用花括号 {}
或者使用 =
运算符来初始化它们的数据成员。
// 初始化结构体
Student s1 = {2021001, "Alice", 18};
Student s2 = {2021002, "Bob", 19};
// 初始化类
Person p1 = {18, "Alice"};
Person p2 = {19, "Bob"};
p1.print();
p2.print();
我们可以使用点操作符 .
来访问结构和类的成员变量,使用点操作符 .
或者箭头操作符 ->
来访问结构和类的成员函数。
// 访问结构体成员变量
cout << "s1.id = " << s1.id << ", s1.name = " << s1.name << ", s1.age = " << s1.age << endl;
// 访问类的成员变量
cout << "p1.name = " << p1.name << ", p1.age = " << p1.age << endl;
// 访问类的成员函数
p1.print();
p2.print();
需要注意的是,如果要访问指向类的指针的成员,应该使用箭头操作符 ->
。例如:
Person* p = new Person;
p->age = 18;
strcpy(p->name, "Alice");
p->print();
delete p;
结构和类都可以定义构造函数,它们是一种特殊的成员函数,在对象创建时被调用,用于初始化对象的数据成员。
class Person {
public:
// 构造函数
Person(int _age, const char* _name) {
age = _age;
strcpy(name, _name);
}
private:
int age;
char name[20];
};
Person p(18, "Alice");
p.print(); // 输出 "name: Alice, age: 18"
在上面的代码中,我们定义了一个 Person
类,并在其中定义了一个构造函数。构造函数 Person(int _age, const char* _name)
用于初始化 Person
类的数据成员 age
和 name
。然后我们使用构造函数创建了一个 Person
对象并输出了它的数据成员。
需要注意的是,如果没有显式定义构造函数,C++会提供默认构造函数。默认构造函数是一个空函数,不进行任何操作。例如:
class Person {
public:
int age;
char name[20];
};
Person p; // 调用默认构造函数
cout << "age: " << p.age << ", name: " << p.name << endl; // 输出 "age: 0, name: "
结构和类也可以定义析构函数,它们是一种特殊的成员函数,在对象销毁时被调用,用于释放对象占用的资源。
class Person {
public:
// 构造函数
Person(int _age, const char* _name) {
age = _age;
name = new char[strlen(_name) + 1];
strcpy(name, _name);
}
// 析构函数
~Person() {
delete[] name;
}
private:
int age;
char* name;
};
Person* p = new Person(18, "Alice");
delete p; // 调用析构函数
在上面的代码中,我们定义了一个 Person
类,并在其中定义了一个析构函数。析构函数 ~Person()
用于释放 Person
类所占用的内存。然后我们通过 new
运算符创建了一个 Person
对象并在销毁时调用了析构函数。
需要注意的是,如果没有显式定义析构函数,C++会提供默认析构函数。默认析构函数是一个空函数,不进行任何操作。