开发者

C++中的结构体使用及说明

目录
  • 一、C++ 结构体(struct)简介
  • 二、C 语言中的结构体
    • 示例(C 语言)
  • 三、C++ 中的结构体
    • 示例(C++ 结构体)
  • 四、C++ struct 与 C struct 的区别
    • 五、C++ struct 与 class 的区别
      • 示例(默认访问权限差异)
      • 示例(默认继承方式差异)
    • 六、使用建议
      •  总结

        C++中很特殊的一类自定义数据-结构体

        为什么说C++中的结构体特殊,因为它即不同于C中的结构体,基本和C++中的Class也是不同的

        一、C++ 结构体(struct)简介

        在 C++ 中,struct 是一种用户自定义的数据类型,它不仅可以包含数据成员(变量),还可以包含成员函数(方法),支持继承、多态等面向对象特性。(重点,需要记住)。

        C++ 的 struct 是 C 语言 struct 的超集,同时也是一种特殊的类(class)。(这句话就很好的总结了C++中struct和c中struct的关系和C++中的Class的关系)

        二、C 语言中的结构体

        在 C 语言 中,struct 仅用于聚合数据,不能包含成员函数,也不支持访问控制和继承。

        示例(C 语言)

        运行

        #include <stdio.h>
        python
        struct Point {
            int x;
            int y;
        };
        
        int main() {
            struct Point p1 = {10, 20};
            printf("x = %d, y = %d\n", p1.x, p1.y);
            return 0;
        }

        特点

        • 只能包含数据成员
        • 所有成员默认为 public
        • 不能有成员函数
        • 不支持继承、多态
        • 声明变量时必须带 struct 关键字(除非用 typedef

        三、C++ 中的结构体

        C++ 保留了 C 语言 strucjst 的所有功能,同时增加了面向对象特性。

        示例(C++ 结构体)

        运行

        #include <IOStream>
        using namespace std;
        
        struct Point {
            int x;
            int y;
        
            // 成员函数
            void print() {
                cout << "x = " << x << ", y = " << y << endl;
            }
        
            // 构造函数
            Point(int a, int b) : x(a), y(b) {}
        };
        
        int main() {
            Point p1(10, 20); // 直接创建对象
            p1.print();
            return 0;
        }

        特点

        javascript
        1. 可以包含成员函数(方法)
        2. 支持构造函数和析构函http://www.devze.com数
        3. 支持访问控制(public / private / protected)
        4. 支持继承
        5. 支持多态(虚函数)
        6. 默认访问权限为 public(与 class 不同)
        7. 默认继承方式为 public(与 class 不同)

        四、C++ struct 与 C struct 的区别

        特性C 语言 structC++ struct
        成员类型只能是数据成员可以是数据成员 + 成员函数
        访问控制无(默认为 public)支持 public /private/protected
        构造函数不支持支持
        继承不支持支持
        多态(虚函数)不支持支持
        使用 struct 关键字声明变量必须带 struct可直接用结构体名作为类型名
        初始化仅支持聚合初始化支持聚合初始化 + 构造函数初始化

        五、C++ struct 与 class 的区别

        在 C++ 中,struct 和 class 几乎完全相同,唯一的区别在于默认访问权限默认继承方式

        对比项structclass
        默认成员访问权限publicprivate
        默认继承方式publicprivate
        其他特性完全一致(构造函数、析构函数、虚函数、模板等)完全一致

        示例(默认访问权限差异)

        运行

        struct S {
            int a; // 默认 public
        };
        
        class C {
            int a; // 默认 private
        };
        
        int main() {
            S s;
            s.a = 10; // OK,public 成员
        
            C c;
            // c.a = 10; // 错误!a 是 private 成员
        }

        示例(默认继承方式差异)

        运行

        struct Base {
            int x;
        };
        
        struct Derived1 : Base { };         // 默认 public 继承
        class  Derived2 : Base { };         // 默认 private 继承
        
        int main() {
            Derived1 d1;
            d1.x = 10; // OK,public 继承
        
            Derived2 d2;
            // d2.x = 10; // 错误!Base::x 在 Derived2 中是 private
        }

        六、使用建议

        C++ struct 通常用于:

        1. 仅包含数据,没有或只有少量简单方法(类似 C 结构体的用途)
        2. 与 C 语言兼容的接口定义

        C++ class 通常用于:

        1. 需要封装、继承、多态的复杂类型
        2. 强调数据隐藏和接口暴露的js面向对象设计

         总结

        C++ struct 是 C struct 的超集,增加了成员函数、访问控制、继承、多态等面向对象特性。

        与 C++ class 的唯一区别在于默认访问权限默认继承方式

        • struct:默认 public 成员 & public 继承
        • class:默认 private 成员 & private 继承

        以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。 

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新开发

        开发排行榜