C与C++中struct的区别
- C++中的struct是对C中的struct进行了扩充,具有了class许多特性。
- 简单来说C中struct只是一堆描述主体属性的数据的组合,而C++中struct添加了对这些属性的封装和行为操作。
在C中使用结构体时需要加上struct,或者对结构体使用typedef取别名,而C++可直接使用,例如:
//结构体声明,C和C++使用同一个
struct Person
{
int iAge;
QString strName;
QString strSex;
};
typedef struct Person Person1;//C中取别名
struct Person stu1; //C中正常使用
Person1 stu2; //C中通过取别名的使用
Person stu3; //C++使用
对于CPP开发者来说,一般开发环境对哪种都支持,看个人习惯,C++中用法更简洁。
C++中struct和class的区别
- 内部成员变量及成员函数的默认防控属性。struct默认防控属性是public的,而class默认的防控属性是private的,可以通过子类对象访问变量去进行测试。例如:
struct A
{
int a;//默认防控属性是public
};
class B
{
int a;//默认防控属性是private
};
- 继承关系中默认防控属性的区别。在继承关系,struct默认是public的,而class是private,可以通过子类对象访问变量去进行测试。例如:
struct A
{
public:
int a;
};
struct B : A//默认继承权限public
{
public:
int b;
};
class A
{
public:
int a;
};
class B : A//默认继承权限private
{
public:
int b;
};
- 模板中的使用。class这个关键字还可用于定义模板参数,就像typename。但是strcut不用与定义模板参数,例如:
template< typename T, typename Y > //可以把typename 换成 class,不能替换为 struct
int Func( const T& t, const Y& y )
{
//......
}
- {}赋初值的区别。因为C++是对C的扩充,那么它就兼容过去C中struct的特性,例如:
struct stu
{
char cSex;
int iAge;
double dScore;
};
stu stu1 = {'m', 20, 500}; //定义时赋初值,在struct时没问题,在class时出错