【C++】C++中的类和结构体的区别,如何区分和使用它们。

以前在学习C语言的时候,用的多的数据结构就是结构体[struct],学习了C++后发现还有一个叫做类的东西[class]。但是这两个有什么区别吗?如何恰当的使用两者,今天就来简单那的说说。

问答

struct能包含成员函数吗?能!

struct能继承吗?能!

struct能实现多态吗?能!!!

 

懂了吗

访问权限

最基本的区别就是默认的访问权限!

struct默认是public的class默认是private的

 

举个栗子

比如以下代码

struct A{int m_nNum;};struct B : A{ QString m_strFile;};

上面例子中,B是public继承A的。如果写成下面:

class A{int m_nNum;};class B : A{ QString m_strFile;};

这样的话B就变成private继承A了。这个就是默认访问权限的意思。

其实说到底继承取决于子类而非基类!

 

混合继承

比如下面简单那的例子

struct A{int m_nNum;};class B : A{ QString m_strFile;};struct C:B{};

上面:B是private继承A,C是public继承B!!!

记住一句话就是了:

struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的!

模板参数

模板参数中,可以使用class定义,但是不能用struct来定义!

赋值

给一个结构赋值:

struct A{char c1; int n2; float db3;};A a = {'a',1,3.14};

这样可以直接给赋值,没有任何错误。但是要是将struct换成class就不行了。为什么呢?大家想一想。

其实就是因为class中有默认的构造函数、析构函数等。可以试着在上面结构中添加一个构造函数,会发现,上面的赋值语句失败了!所以真理很明确了!

我们平时使用{}来对结构赋值,是一个初始化列表形式进行初始化,这样简单的初始化只能用在简单的数据结构上,如果加上构造函数,那么struct会表现出一种对象的特性,因此继续赋值会失效!

当我们在一个结构中加入构造函数后。类的内部结构发生了变化了,加入一个普通函数已久可以,普通函数其实也可以理解成一种对数据结构的一种算法,这样并不打破原本数据的特性!

重点

struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值