目录
一、struct
"struct
" 是一种在编程中常见的数据结构,它允许将不同类型的数据组合在一起,以便作为一个单独的单元进行处理。在C和C++中,struct用于定义自定义的复合数据类型。它可以包含不同类型的数据成员,这些成员可以是基本数据类型、数组、指针、甚至是其他结构体。
在C中,一个简单的struct定义可能如下所示:
struct Person {
char name[50];
int age;
float height;
};
在C++中,也可以这样定义struct,并在其内部声明成员函数:
struct Person {
std::string name;
int age;
float height;
void displayInfo() {
std::cout << "Name: " << name << std::endl;
std::cout << "Age: " << age << std::endl;
std::cout << "Height: " << height << std::endl;
}
};
在这两个示例中,我们定义了一个名为Person的struct,它包含了一个名为name的字符串、一个整数age和一个浮点数height。在C++的示例中,我们还在struct内部定义了一个成员函数displayInfo(),用于显示Person对象的信息。使用struct可以方便地组织和管理数据,特别是当一些数据项有关联时。
二、class
"class
" 是面向对象编程中的一个重要概念,它用于定义一个新的数据类型,这个数据类型可以包含数据成员(属性)和成员函数(方法)。通过类的实例化,可以创建该类的对象,并在程序中使用。
在C++中,类的定义通常包括以下部分:
- 数据成员:类中的变量,用于存储对象的状态或属性。
- 成员函数:类中的函数,用于操作对象的数据成员或执行其他任务。
- 访问控制:用于限制类成员的访问权限,包括
public
、protected
和private
三种访问级别。
一个简单的类定义可能如下所示:
class Person {
public:
// 数据成员
std::string name;
int age;
// 成员函数
void displayInfo() {
std::cout << "Name: " << name << std::endl;
std::cout << "Age: " << age << std::endl;
}
};
在这个示例中,我们定义了一个名为Person的类,它有两个公有的数据成员name
和age
,以及一个公有的成员函数displayInfo()
,用于显示对象的信息。
通过实例化该类,可以创建Person类的对象,并使用其成员函数和数据成员。
int main() {
// 创建 Person 对象
Person person1;
// 设置对象的数据成员
person1.name = "Alice";
person1.age = 30;
// 调用对象的成员函数
person1.displayInfo();
return 0;
}
通过类和对象,可以更好地组织和管理代码,并实现面向对象编程的各种概念,如封装、继承和多态。
三、struct和class的优缺点
struct
和 class
在C++中都用于定义自定义的数据类型,它们在某些方面是相似的,但在语义上有一些不同之处。以下是它们的一些优缺点:
struct的优点:
默认访问权限为public:在struct中,默认的成员访问权限是public,这意味着结构体的成员可以直接从外部访问,这使得结构体更适合于简单的数据聚合。
适合用于简单数据聚合:struct更适合用于简单的数据聚合,它们通常用于表示一组相关的数据。
语义上更接近C语言中的结构体:如果你习惯了C语言中的结构体的语义和用法,那么在C++中使用struct可能更加自然。
struct的缺点:
- 缺少封装性:struct默认的成员访问权限为public,这可能导致数据的封装性较差,使得程序更容易出现意外修改数据的情况。
class的优点:
默认访问权限为private:在class中,默认的成员访问权限为private,这意味着class提供了更好的封装性,可以更好地隐藏数据实现细节。
适合用于面向对象编程:class是面向对象编程的基本单元,它提供了封装、继承和多态等面向对象编程的特性,使得代码更加模块化和可维护。
class的缺点:
相对于struct,class语法更复杂:class提供了更多的特性和语法糖,这使得它的语法相对于struct更加复杂,可能会增加学习和理解的难度。
需要更多的代码来实现相同的功能:由于class提供了更多的特性和语法糖,可能需要更多的代码来实现相同的功能,这可能会增加代码量和复杂性。
综上所述,struct和class在C++中都有其用武之地,选择使用哪种取决于具体的需求和语境。通常情况下,如果你只是需要简单的数据聚合,或者想要语义上更接近C语言中的结构体,那么可以选择使用struct;如果你需要更好的封装性和面向对象的特性,那么应该选择使用class。
四、struct和class的区别
在C++中,struct
和 class
都可以用来定义自定义的数据类型,但它们之间有一些语义上的区别:
默认访问权限:
struct
:默认的成员访问权限为public
,这意味着结构体的成员可以直接从外部访问。class
:默认的成员访问权限为private
,这意味着类的成员默认情况下是私有的,只能在类内部访问。
成员函数:
struct
:在C++中,struct可以包含成员函数,但在C++中的成员函数的语法和调用方式与class相同。class
:class中的成员函数可以访问类的私有成员,它们提供了更好的封装性。
继承:
struct
:在C++中,struct和class都可以被继承,区别在于默认继承方式。struct默认继承方式为public
,而class默认继承方式为private
。class
:class可以更好地支持面向对象编程的特性,如继承、多态等。
语义:
struct
:在C++中,struct的语义与C语言中的结构体相似,用于简单的数据聚合。class
:class更适合用于实现面向对象编程的概念,如封装、继承和多态。
总的来说,struct
和 class
在C++中在语法上有些许区别,但它们都可以用于定义自定义的数据类型。在实际编程中,选择使用哪种取决于具体的需求和编程风格。
面经!面经!背起走!