最近在看android代码,经常会发现有struct定义的结构,也有用class定义的结构。从c语言工程师转到c++工程师,开始还真是很费解。
就我原来的理解,struct其实就是一种记录各种数据格式的数据结构,但是在c++中,显然只是struct一种表现形式。
一. c++中的struct能做什么
1.c++中struct保留c语言中用法,即当成一种只有成员变量的数据结构。此时的struct,可以用像c语言一样花括弧来初始化:Student A = {1,12,"xxx",3};
typedef struct _student {
int id;
int age;
char * name;
int grade;
}Student;
2.c++中延展struct关键字的用法,使得struct可以拥有成员函数。从下面的可以看出,struct已经初具class的形态。
struct AExample {
AExample();
~AExample();
void setFd(int fd);
int mfd;
int mChar;
};
3. c++中的struct,不仅可以表现为如上的形式,而且可以使用public, protected, private等权限限制。而一旦允许其这样使用,势必是为struct被继承做准备。
不仅如此,struct同样可以继承class类和实现多态,这里不给出实例代码了。
struct AExample {
public:
AExample();
~AExample();
protected:
void setFd(int fd);
private:
int mfd;
int mChar;
};
struct AExam_Child : public AExample{
public:
AExam_Child();
~AExam_Child();
protected:
void use(int fd);
private:
int mUse;
}
二. c++中的struct与class的区别
从上面的介绍,我们可以看出,struct关键字与class的功能基本一致,那去掉其中一个岂不更好。表面上看,这两者没有差别,但实际上还是有些差异。
1. 默认的成员访问权限:struct默认是public,class默认是private。
2.默认的继承访问权限:struct默认是public,class默认是private。
从以上的差别来看,可以说如果都显式的表明访问权限关键字,那么两者基本等价。
至于用法的差异,还得继续研究.......