当前位置:首页 » 《休闲阅读》 » 正文

C++ struct 和 class 的区别、C++结构体和C结构体的区别等基础知识。

9 人参与  2024年10月13日 11:21  分类 : 《休闲阅读》  评论

点击全文阅读


特性C++ structC++ classC struct
默认访问控制符publicprivate全部公开
支持成员函数
继承支持
模板支持
运算符重载

在C++中,structclass 是两种非常相似的用户定义类型,二者有一些关键区别。C++的 struct 与 C 语言中的 struct 也存在一些差异,主要是因为 C++ 提供了面向对象编程的特性。

C++中 structclass 的区别

默认访问控制符不同

struct 默认的成员访问控制是 publicclass 默认的成员访问控制是 private

例如:

        struct MyStruct {
            int x; // 默认是public
        };

        class MyClass {
            int x; // 默认是private
        };

   2.继承的访问控制符不同

struct 默认的继承方式是 public 继承。class 默认的继承方式是 private 继承。

例如:

        struct BaseStruct {};
        struct DerivedStruct : BaseStruct {};  // public继承

        class BaseClass {};
        class DerivedClass : BaseClass {};    // private继承

语义上的差别

在设计层面上,class 通常用于表示 面向对象编程中的类,包含封装、继承和多态等特性。struct 更常用于表示 简单的数据结构,虽然它也可以像 class 一样定义成员函数和继承关系。

C++ 结构体和 C 结构体的区别

成员函数

在 C++ 中,struct 可以包含 成员函数构造函数析构函数,甚至支持 重载运算符。而在 C 语言中,struct 只能包含 数据成员

例如:

// C++中的结构体
struct Point {
    int x, y;
    Point(int a, int b) : x(a), y(b) {}  // 构造函数
    void display() { 
        std::cout << "Point(" << x << ", " << y << ")\n"; 
    }
};

// C语言中的结构体
struct Point_C {
    int x, y;
};
 2.访问控制

C++ 中的 struct 可以使用访问控制符 public, private, 和 protected 来控制成员的访问权限,C 语言中的 struct 没有访问控制机制,所有成员都是 公开的

例如:

struct Point {
private:
    int x, y;
public:
    Point(int a, int b) : x(a), y(b) {}
    void display() { std::cout << x << ", " << y << "\n"; }
};

3.继承

在 C++ 中,struct 可以支持继承,类似于类的继承关系。C 语言中的 struct 不支持继承。

例如:

struct Base {
    int x;
};

struct Derived : Base {
    int y;
};

4.模板支持

C++ 中的 struct 可以与模板一起使用,而 C 语言中的 struct 不支持模板。

例如:

template <typename T>
struct Box {
    T value;
};

示例代码对比

C++ struct 示例

#include <iostream>
struct Point {
    int x, y;
    
    // 构造函数
    Point(int a, int b) : x(a), y(b) {}

    // 成员函数
    void display() {
        std::cout << "Point(" << x << ", " << y << ")\n";
    }
};

int main() {
    Point p(1, 2);
    p.display();
    return 0;
}

C 结构体示例

#include <stdio.h>

struct Point {
    int x, y;
};

int main() {
    struct Point p = {1, 2};
    printf("Point(%d, %d)\n", p.x, p.y);
    return 0;
}


 


点击全文阅读


本文链接:http://zhangshiyu.com/post/171274.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1