小阳同学八股学习日记-struct和class

本文详细比较了C++中的struct和class,阐述了它们的定义、优缺点,以及在数据聚合、封装性、继承和面向对象特性方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、struct

二、class

三、struct和class的优缺点

四、struct和class的区别


一、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++中,类的定义通常包括以下部分:

  • 数据成员:类中的变量,用于存储对象的状态或属性。
  • 成员函数:类中的函数,用于操作对象的数据成员或执行其他任务。
  • 访问控制:用于限制类成员的访问权限,包括publicprotectedprivate三种访问级别。

        一个简单的类定义可能如下所示:

class Person {
public:
    // 数据成员
    std::string name;
    int age;

    // 成员函数
    void displayInfo() {
        std::cout << "Name: " << name << std::endl;
        std::cout << "Age: " << age << std::endl;
    }
};

         在这个示例中,我们定义了一个名为Person的类,它有两个公有的数据成员nameage,以及一个公有的成员函数displayInfo(),用于显示对象的信息。

        通过实例化该类,可以创建Person类的对象,并使用其成员函数和数据成员。

int main() {
    // 创建 Person 对象
    Person person1;

    // 设置对象的数据成员
    person1.name = "Alice";
    person1.age = 30;

    // 调用对象的成员函数
    person1.displayInfo();

    return 0;
}

        通过类和对象,可以更好地组织和管理代码,并实现面向对象编程的各种概念,如封装、继承和多态。

三、struct和class的优缺点

         structclass 在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++中,structclass 都可以用来定义自定义的数据类型,但它们之间有一些语义上的区别:

默认访问权限

  • struct默认的成员访问权限为public,这意味着结构体的成员可以直接从外部访问。
  • class默认的成员访问权限为private,这意味着类的成员默认情况下是私有的,只能在类内部访问。

成员函数

  • struct在C++中,struct可以包含成员函数,但在C++中的成员函数的语法和调用方式与class相同。
  • classclass中的成员函数可以访问类的私有成员,它们提供了更好的封装性。

继承

  • struct在C++中,struct和class都可以被继承,区别在于默认继承方式。struct默认继承方式为public,而class默认继承方式为private
  • classclass可以更好地支持面向对象编程的特性,如继承、多态等。

语义

  • struct在C++中,struct的语义与C语言中的结构体相似,用于简单的数据聚合。
  • classclass更适合用于实现面向对象编程的概念,如封装、继承和多态。

        总的来说,structclass 在C++中在语法上有些许区别,但它们都可以用于定义自定义的数据类型。在实际编程中,选择使用哪种取决于具体的需求和编程风格。

面经!面经!背起走!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值