21xrx.com
2024-11-22 04:13:14 Friday
登录
文章检索 我的文章 写文章
C++中struct和class的区别是什么?
2023-07-08 16:06:25 深夜i     --     --
C++ struct class 区别

在C++中,struct和class都是用于定义数据类型的关键字,它们的功能类似,但是它们的使用方式和语义略有不同,这里简单介绍它们的区别。

1. 成员默认可见性不同

在struct中,所有的成员都是公共的(public),而在class中,所有的成员默认是私有的(private),需要使用public关键字来声明公共接口。

例如:


struct MyStruct {

  int a;

  void print()

    std::cout << a << std::endl;

  

};

class MyClass {

  int b;

public:

  void setB(int x)

    b = x;

  

  void print()

    std::cout << b << std::endl;

  

};

在MyStruct中,成员a是公共的,函数print也是公共的,可以直接通过对象来访问。而在MyClass中,成员b是私有的,可以通过setB来设置其值,但是print是公共的函数,可以使用对象来调用。

2. 继承默认继承方式不同

在struct中,继承默认是公共继承(public inheritance),而在class中,继承默认是私有继承(private inheritance),需要使用public或protected关键字来声明继承方式。

例如:


struct MyStructBase

  int a;

;

struct MyStructDerived : MyStructBase

  int b;

;

class MyClassBase

  int c;

;

class MyClassDerived : public MyClassBase

  int d;

;

在MyStructDerived中,使用struct定义了一个派生类,继承了MyStructBase类,a和b都是公共成员,可以直接使用。而在MyClassDerived中,使用class定义了一个派生类,使用public关键字来声明了public继承,类MyClassBase的成员c是私有的,在MyClassDerived中不能直接访问。

3. 类型定义方式不同

在struct中,可以直接使用typedef定义类型,而在class中,需要使用typedef与class一起使用。

例如:


typedef struct MyStructType

  int a;

  int b;

MSTYPE;

typedef class MyClassType

  int c;

  int d;

*MCTYPE;

在MyStructType中,使用typedef定义了一个结构体类型MSTYPE,可以直接使用,而在MyClassType中,使用typedef定义了一个指向类的指针类型MCTYPE,需要使用*表示指针。

总的来说,struct和class在C++中的区别主要是成员默认可见性不同、继承默认继承方式不同、类型定义方式不同。因此,选择使用哪一个取决于具体的需求和使用场景。

  
  

评论区

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