快乐的码农
以前在学习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更适合看成是一个对象的实现体!
遇见你
后记
【鹅卵石爱编程】分享Linux,Windows下C/C++,编程相关的技术,坚持不定时进行技术支出,希望大家能够喜欢。
你的关注点赞就是对我最大的支持,感谢各位粉一直以来的支持。
感谢