📅  最后修改于: 2023-12-03 15:13:58.073000             🧑  作者: Mango
在C++中,我们能够很容易地创建各种数据类型并对其进行简单操作。然而,在某些情况下,我们需要创建一个自定义的数据类型,以便更好地表示我们正在解决的问题。在这种情况下,我们可以使用C++中的类(class)和结构体(struct)来实现。本文将介绍C++中类和结构体的概念和使用,并提供一些示例代码和常见问题的解决方法。
类和结构体都是用户定义的数据类型,它们可以包含变量(成员变量)和函数(成员函数)。它们的主要区别在于默认的访问权限和继承方式。在结构体中,默认的访问权限是public,在类中则是private。此外,结构体中不能使用继承,而类可以使用公共、保护和私有继承。下面是创建一个简单类和结构体的示例。
// 定义一个结构体
struct Person {
std::string name;
int age;
};
// 定义一个类
class Rectangle {
public:
double width;
double height;
double get_area() {
return width * height;
}
};
类和结构体中的成员函数是在类或结构体中定义的函数。它们被用来操作类或结构体的成员变量。成员函数具有一个特殊的指针this,它指向正在调用该函数的对象的地址。下面是一个计算矩形面积的示例:
class Rectangle {
public:
double width;
double height;
double get_area() {
return width * height;
}
};
类和结构体也可以定义构造函数和析构函数。构造函数用于初始化类或结构体的成员变量,而析构函数在对象被销毁时执行一些清理工作。下面是在Rectangle类中定义无参构造函数和析构函数的示例:
class Rectangle {
public:
double width;
double height;
Rectangle() {
width = 0;
height = 0;
}
~Rectangle() {
std::cout << "Rectangle destroyed" << std::endl;
}
double get_area() {
return width * height;
}
};
类或结构体中的成员变量通过.
操作符来访问。例如:
Rectangle r;
r.width = 10;
r.height = 5;
类或结构体中的成员函数通过.
操作符来访问。例如:
Rectangle r;
r.width = 10;
r.height = 5;
double area = r.get_area();
this指针在类或结构体的成员函数中自动被定义。例如:
class Rectangle {
public:
double width;
double height;
double get_area() {
return this->width * this->height;
}
};
有参构造函数的定义与普通函数的定义类似。例如:
class Rectangle {
public:
double width;
double height;
Rectangle(double w, double h) {
width = w;
height = h;
}
double get_area() {
return width * height;
}
};
// 使用有参构造函数创建对象
Rectangle r(10, 5);
在C++中,类可以使用公有(public)、保护(protected)和私有(private)继承。这些关键字指定了从基类中派生出的派生类中的成员的可访问性。例如:
class Shape {
public:
virtual double get_area() = 0;
};
class Rectangle : public Shape {
public:
double width;
double height;
Rectangle(double w, double h) {
width = w;
height = h;
}
double get_area() {
return width * height;
}
};
在上面的示例中,Rectangle类公开继承Shape类,并实现Shape类中的get_area()函数。