21xrx.com
2024-12-22 17:22:26 Sunday
登录
文章检索 我的文章 写文章
C++ 中 struct 和 class 的区别是什么?
2023-07-13 15:48:39 深夜i     --     --
C++ struct class 区别

在 C++ 中,struct 和 class 都是用来定义数据结构的关键字,它们的语法几乎都相同,但是它们在默认的访问控制和继承方面有所不同。下面我们来看一下它们的不同之处。

1. 默认访问控制权限不同

在 C++ 中,struct 中的成员变量和函数默认都是 public 的,而 class 中的成员变量和函数默认是 private 的。这意味着,当我们使用 struct 定义一个类的时候,所有的成员变量和函数都可以被外部访问。而如果我们使用 class 定义类的话,则所有的成员变量和函数都是默认为私有的,只有类的内部才能访问。

例如,下面的代码中,我们分别使用 struct 和 class 定义了一个类,我们发现,当我们调用一个方法时,对于 struct 类型的函数,可以直接使用点号运算符来调用,这说明 struct 中的成员函数是 public 的。但是对于 class 类型的函数,我们需要使用成员函数调用运算符"->"来调用,因为 class 中的函数默认是私有的。


struct MyStruct

{

  int a;

  void print() std::cout << "a = " << a << std::endl;

};

class MyClass

{

private:

  int a;

public:

  void print() std::cout << "a = " << a << std::endl;

};

int main()

{

  MyStruct s;

  s.a = 100;

  s.print();          // 直接调用

  MyClass* c = new MyClass;

  c->print();          // 必须使用箭头运算符

  return 0;

}

2. 默认继承权限不同

在 C++ 中,struct 的继承权限是 public 的,而 class 的继承权限是 private 的。这就意味着,在使用 struct 的时候,继承而来的成员变量和成员函数的访问权限都是 public 的,而在使用 class 的时候,继承而来的成员变量和成员函数的访问权限都是 private 的。

例如,下面的代码中,我们分别定义了一个父类,一个以 struct 作为关键字的子类,一个以 class 作为关键字的子类。我们发现,当子类继承自父类时,如果使用 struct 来定义子类,则子类的成员变量和成员函数的访问权限都是 public 的,可以直接被外部访问。但是如果使用 class 来定义子类,则子类的成员变量和成员函数的访问权限都是 private 的,只能在子类内部被访问。


class Parent

{

public:

  int a;

  void print() std::cout << "a = " << a << std::endl;

};

struct Child1 : public Parent

;

class Child2 : public Parent

;

int main()

{

  Child1 c1;

  c1.a = 100;

  c1.print();     // 可以直接访问

  Child2 c2;

  // c2.a = 200;   // 不可以访问

  // c2.print();   // 不可以调用

  return 0;

}

综上所述,struct 和 class 之间最主要的区别在于默认的访问控制和继承权限不同。在使用 struct 的时候,我们需要考虑到成员变量和函数都是 public 的,可以被直接访问,而在使用 class 的时候,我们需要注意到成员变量和函数默认为 private,需要使用成员函数调用运算符来访问。同时,在继承方面,使用 struct 作为关键字的子类将继承所有父类的 public 成员变量和成员函数,而使用 class 作为关键字的子类将继承所有父类的 private 成员变量和成员函数。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复