C++ 中 ,struct与class的区别 ?

19 阅读2分钟

主要区别

  1. 默认访问修饰符:使用 struct 关键字定义的成员默认为公共(public)访问权限,而使用 class 关键字定义的成员默认为私有(private)访问权限。这是最明显的区别之一。

  2. 继承方式:使用 struct 关键字定义的类默认为公共继承(public inheritance),而使用 class 关键字定义的类默认为私有继承(private inheritance)。

  3. 类型别名:使用 struct 关键字定义的类可以通过直接声明一个对象来创建类型别名(与 C 兼容),而使用 class 关键字定义的类则需要使用 typedef 或 using 声明别名。

public继承 和 private继承 的区别是什么?

公共继承(public inheritance):

-   基类的公共成员在派生类中仍然具有公共访问权限。
-   基类的保护成员在派生类中仍然具有保护访问权限。
-   基类的私有成员在派生类中不可直接访问。
  • code
class Base {
public:
    int publicMember;
protected:
    int protectedMember;
private:
    int privateMember;
};

class DerivedPublic : public Base {
    // 继承的成员在派生类中具有相同的访问权限
public:
    void accessBaseMembers() {
        publicMember = 10;         // 可以访问基类的公共成员
        protectedMember = 20;     // 可以访问基类的保护成员
        // privateMember = 30;      // 不能直接访问基类的私有成员
    }
};


  1. 私有继承(private inheritance):

    • 基类的公共成员在派生类中变为私有成员。
    • 基类的保护成员在派生类中仍然具有保护访问权限。
    • ~~ 基类的私有成员在派生类中不可直接访问。~~
  • code
class Base {
public:
    int publicMember;
protected:
    int protectedMember;
private:
    int privateMember;
};

class DerivedPrivate : private Base {
    // 继承的成员在派生类中变为私有成员
public:
    void accessBaseMembers() {
        publicMember = 10;          // 变为私有成员,无法访问
        protectedMember = 20;      // 可以访问基类的保护成员
        // privateMember = 30;       // 不能直接访问基类的私有成员
    }
};