/********************************************************************************************
文件说明:
struct和class的区别
时间地点:
陕西师范大学 问津楼 2017.5.18
作 者:
九 月
*********************************************************************************************/
/********************************************************************************************
(一)问题
在我具体说明struct和class区别之前,我首先抛出几个问题,这也是我第一次在阅读OpenCv源代码
的时候所思考的问题:
1)struct是否有成员访问控制符public、protected、private?
2)struct能够包含成员函数?
3)struct能够被其他结构体或者类继承?像class person:public human{};
4)struct能否包含虚函数,实现多态?
5)如果上面的功能struct都能够实现,那C++中为什么还要出现class?(或者说struct和class最本质
的区别是什么?)
(二)解答
要回答上面的问题,首先必须设定一个前提条件,否则是说不明白的:
1)C语言中的struct:如果您向那些C语言的初学者或者精通C语言但没有接触过C++的人抛出上面的问题,
它们可能会认为您有病,因为,我第一次遇见struct里面包含成员函数的时候,也是这样想的。但
是程序确实可以编译成功,但是就迷糊了,难道是我以前看的树错了?其实不是这样。
2)毫无疑问,C语言中的struct是不能包含成员函数的,不然很多源代码为什么要用函数指针去替代
成员函数,例如linux操作系统中的源代码,struct是没有包含成员函数的,它们如果想包含成员函
数的话,都是通过包含函数指针实现的。
3)因此,说struct中不能包含成员函数指的的c语言中的struct,不信的话,你可以写一个包含成员函数
的struct在ubuntu环境下,使用gcc编译一下,看能不能通过
1)那为什么struct有可以包含成员函数呢?这个struct指的是C++中的结构体
2)C++在增加了class类型以后,为了兼容C语言,所以仍然保留了struct结构体类型,但是对struct类型
进行了扩充,经过扩充之后的struct就可以包含成员函数,实现继承、多态等。
3)那么,既然struct可以实现与class相似的功能,它与class本质的区别在那块?
struct和class最本质的区别只有一个:那就是struct结构体类型中的所有成员默认为public,而class
类型默认为private。除此之外,其他完全相同。
*********************************************************************************************/
问题:struct和class的区别,struct能否包含成员函数
最新推荐文章于 2024-10-06 21:16:16 发布