c++中类(class)和结构体(struct)的对比

c++中class和struct的对比

当你在C++中定义一个类(class)或结构体(struct)时,你实际上在创建一个自定义的数据类型,用于组织和操作数据。下面是更详细的对比,并附带示例代码:

1. 成员变量和成员函数:

    • 成员变量和成员函数默认为私有属性,需要使用 publicprotectedprivate 访问控制符来控制成员的访问权限。
  • 结构体
    • 成员变量和成员函数默认为公有属性,即默认情况下结构体的成员是公开的,可以被外部访问。
访问控制符访问权限可见性访问位置
public公有外部和派生类内外都可
protected受保护派生类内部和派生类内部
private私有内部内部
// 类的定义
class MyClass {
public:
    int publicVar;
    
    void publicFunc() {
        // 成员函数可以访问私有成员
        privateVar = 10;
    }
    
private:
    int privateVar;
};

// 结构体的定义
struct MyStruct {
    int publicVar;
    
    void publicFunc() {
        // 成员函数可以访问私有成员
        privateVar = 10;
    }
    
private:
    int privateVar;
};

2. 继承:

  • 结构体
    • 与类一样,也支持继承,可以继承其他结构体或类。
// 基类的定义
class BaseClass {};

// 类的继承
class DerivedClass : public BaseClass {};

// 结构体的继承
struct DerivedStruct : public BaseClass {};

3. 默认访问权限:

    • 默认的访问权限是私有(private)。
  • 结构体
    • 默认的访问权限是公有(public)。
// 类的默认访问权限为私有
class MyClass {
    int privateVar;
};

// 结构体的默认访问权限为公有
struct MyStruct {
    int publicVar;
};

4. 默认继承方式:

    • 默认的继承方式是私有继承(private inheritance)。
  • 结构体
    • 默认的继承方式是公有继承(public inheritance)。

私有继承和公有继承详细说明点击链接。

// 类的默认继承方式为私有继承
class BaseClass {};

class DerivedClass : BaseClass {};  // 默认为私有继承

// 结构体的默认继承方式为公有继承
struct DerivedStruct : BaseClass {};  // 默认为公有继承

5. 语义:

    • 通常用于封装对象的状态和行为,以实现面向对象编程的封装、继承和多态特性。
  • 结构体
    • 通常用于组织一组相关的数据,并且可以包含成员函数以操作这些数据,但它的主要目的是用于数据的组织和表示。
// 类的示例
class Point {
public:
    int x, y;
    
    void move(int deltaX, int deltaY) {
        x += deltaX;
        y += deltaY;
    }
};

// 结构体的示例
struct Vector {
    double x, y, z;
    
    double length() {
        return sqrt(x * x + y * y + z * z);
    }
};

6. 使用习惯:

    • 在面向对象编程中更常见,用于定义对象的类型和行为。
  • 结构体
    • 在C++中也被广泛使用,通常用于简单的数据组织和轻量级对象的定义,以及与C语言代码的交互。
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值