C++的struct
C++中的struct与C的struct不是一肥事,首先讲的是C++的,不要看走眼了。。。
C++的struct 不仅仅是单纯的自定义数据结构,还具有class的功能特性:
- 它可以拥有成员函数
- 它可以继承
- 它可以实现多态
- 它也有三种权限修饰符
那它和class还有啥区别呢?主要的区别有两点:
- 默认的继承访问权限,struct是public,class是private
- struct的成员访问控制默认是public,class是private
其他
struct不能用于定义模板参数(typename),class可以,借助typedef 也可以使得struct用于模板参数,如:
template<class T> //编译通过
typedef struct tst{};
struct st{};
template<tst T> //编译通过
template<struct st T> //编译报错
struct,class的成员变量全是公有的且没有构造函数情况下,可以使用列表初始化,如:
//定义
AStruct aStruct{5,5.5};
AClass aClass{5,5.5};
C的struct
C++中的struct与C的struct不是一肥事,下面讲的是C的,不要看走眼了。。。
C的struct仅仅是用户自定义数据,不能直接声明和定义函数,更没有构造函数、继承。
但是可以包含函数指针,实现函数的定义。
直接上菜。。。
#include <stdio.h>
struct st{
int n;
void (*afunc)(int);
};
void func(int a)
{
printf("a :%d",a);
}
int main()
{
//struct st st{88,func};//编译不通过,C++的可以编译
struct st st={88,func};
st.afunc(11);
return 0;
}
以上是作者学习过程中的总结,如有错误,欢迎指正!
参考书籍:C++程序设计语言(1~3部分)[美] Bjarne Stroustrup 著 王刚 杨巨峰 译
参考博客