一文讲明白C++中的结构体Struct和类Class的区别以及使用场景

2024-02-27 1410阅读

温馨提示:这篇文章已超过390天没有更新,请注意相关的内容是否还可用!

一文讲明白C++中的结构体Struct和类Class的区别以及使用场景

文章目录

  • 一文讲明白C++中的结构体Struct和类Class的区别以及使用场景
    • 一、C++中的结构体Struct
    • 二、C++中的类Class
    • 三、结构体Struct和类Class之间的区别以及各自使用场景

      一、C++中的结构体Struct

        在C++中,结构体(struct)是一种用于组合不同类型的数据成员的用户自定义数据类型。结构体允许你在一个单一的实体中存储多个不同类型的数据,并且可以根据需要自定义数据成员的布局和访问权限。下面是关于C++中结构体的详细解释:

      一文讲明白C++中的结构体Struct和类Class的区别以及使用场景
      (图片来源网络,侵删)
      • 1、声明结构体

          你可以使用struct关键字来声明一个结构体。结构体的声明通常放在头文件或者全局命名空间中,以便在多个地方都可以使用。

        struct Person {
            std::string name;
            int age;
            double height;
        };
        
        • 2、结构体成员

            在结构体中,你可以定义多种不同类型的成员变量,这些变量称为数据成员。成员可以是基本数据类型、自定义的结构体、指针、数组等。

          struct Rectangle {
              double width;
              double height;
          };
          struct Student {
              std::string name;
              int age;
              double grades[5];
              Rectangle favoriteRectangle;
          };
          
          • 3、结构体实例化

              你可以像创建基本类型变量一样创建结构体变量。结构体的数据成员可以通过.运算符访问。

            Person person1;
            person1.name = "Alice";
            person1.age = 25;
            person1.height = 1.75;
            
            • 4、默认访问权限

                在结构体中,数据成员的默认访问权限是public,这意味着它们可以在结构体外部直接访问。

              struct Point {
                  double x;
                  double y;
              };
              int main() {
                  Point p;
                  p.x = 10.0;
                  p.y = 5.0;
                  return 0;
              }
              
              • 5、成员函数

                  结构体也可以拥有成员函数,但它们的使用通常是限于简单的操作,而不是丰富的行为。成员函数在结构体内部声明和定义,可以访问结构体的数据成员。

                struct Circle {
                    double radius;
                    double calculateArea() {
                        return 3.14 * radius * radius;
                    }
                };
                int main() {
                    Circle c;
                    c.radius = 5.0;
                    double area = c.calculateArea();
                    return 0;
                }
                
                • 6、访问控制

                    C++11引入了结构体成员的访问控制修饰符(public、private、protected),允许你控制成员的访问权限。默认情况下,C++中的结构体成员是public的,但你也可以显式地指定不同的访问权限。

                  struct Example {
                      int publicMember;    // 默认是public
                  private:
                      int privateMember;
                  public:
                      void setPrivateMember(int value) {
                          privateMember = value;
                      }
                      int getPrivateMember() {
                          return privateMember;
                      }
                  };
                  

                    总之,C++中的结构体是一种方便的数据组织方式,允许你将不同类型的数据组合在一起。虽然结构体的默认访问权限是public,但你也可以使用访问控制修饰符来更好地控制结构体成员的可见性。对于简单的数据封装和轻量级的数据结构,结构体是一个很好的选择。

                  二、C++中的类Class

                    在C++中,类(class)是一种重要的概念,用于创建用户定义的数据类型,可以包含数据成员和成员函数,以实现数据的封装和操作。类是面向对象编程的核心,允许将数据和操作封装在一起,以创建更加模块化和可维护的代码。下面是关于C++中类的详细解释:

                  • 1、类的声明和定义

                      类的声明通常在头文件(.h 或 .hpp)中,而类的成员函数的定义则在源文件(.cpp)中。这种分离使得代码的组织更加清晰。

                    // Person.h
                    class Person {
                    private:
                        std::string name;
                        int age;
                    public:
                        Person(const std::string &n, int a);
                        void displayInfo();
                    };
                    
                    // Person.cpp
                    #include "Person.h"
                    Person::Person(const std::string &n, int a) : name(n), age(a) {}
                    void Person::displayInfo() {
                        std::cout 
                    private:
                        std::string name;
                    public:
                        Student(const std::string &n);
                        ~Student();
                    };
                    
                    private:
                        double radius;
                    public:
                        Circle(double r);
                        double calculateArea();
                    };
                    double Circle::calculateArea() {
                        return 3.14 * radius * radius;
                    }
                    
                    private:
                        int privateMember;
                    public:
                        int publicMember;
                    protected:
                        int protectedMember;
                    };
                    
                    public:
                        virtual double calculateArea();
                    };
                    class Rectangle : public Shape {
                    private:
                        double width;
                        double height;
                    public:
                        Rectangle(double w, double h);
                        double calculateArea() override;
                    };
                    
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]