C++中struct和class的区别和联系
2013-05-07 19:25
239 查看
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。
struct能包含成员函数吗? 能!
struct能继承吗? 能!!
struct能实现多态吗? 能!!!
一、区别
1)默认的继承访问权限。struct是public的,class是private的。
写如下的代码:
struct A
{
char a;
};
struct B : A
{
char b;
};
这个时候B是public继承A的。如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。所以我们在平时写类继承的时候,通常会这样写:
class B : public A
就是为了指明是public继承,而不是用默认的private继承。
当然,到底默认是public继承还是private继承,取决于子类而不是基类。我的意思是,struct可以继承class,
同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。如下:
struct A{};
class B : A{}; //private继承
struct C : B{}; //public继承
2)struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。
3)“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。
二、联系
c++中除了上述三点不同,struct和class完全是可以说一样的, 包括对C中struct的特性的兼容也是一样的。
例如,C++中的struct是对C中的struct的扩充,既然是扩充,那么它就要兼容过去C中struct应有的所有特性。C语言中你可以这样写:
struct A //定义一个struct
{
char c1;
int n2;
double db3;
};
A a={'p',7,3.1415926}; //定义时直接初始化
也就是说struct可以在定义的时候用{}初始化。
但是c++中struct想要用{}来赋初值,则它必须满足很多的约束条件,这些条件实际上就是让struct更体现出一种数据机构,即表现得和c语言中的struct的行为一模一样。
如果c++中的struct 和 class的行为表现得和c语言中的struct的行为一模一样,则它们都可以通过c语言里用来初始化struct的{}来初始化。这种方式兼容C语言中struct的特性。但是,如果一但struct 和 class的行为和c语言中的struct的行为不完全一样,即不是纯粹的一个数据结构的实现体,则不能通过{}来初始化。
那么如何判断c++中的struct 和 class的行为表现是否和c语言中的struct的行为一模一样呢?请参考我的另外一篇文章:
http://blog.csdn.net/nodeathphoenix/article/details/37672169
注意:
如果c++中的struct 和 class满足一定条件后,像c语言中的struct一样通过{}初始化, 则定义struct 和 class对象时, 不会调用struct 和 class的构造函数的.此时的struct 和 class就像是一个c语言中的struct,它本身是没有构造函数而且编译器也不会帮它生成默认的构造函数的.
struct能包含成员函数吗? 能!
struct能继承吗? 能!!
struct能实现多态吗? 能!!!
一、区别
1)默认的继承访问权限。struct是public的,class是private的。
写如下的代码:
struct A
{
char a;
};
struct B : A
{
char b;
};
这个时候B是public继承A的。如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。所以我们在平时写类继承的时候,通常会这样写:
class B : public A
就是为了指明是public继承,而不是用默认的private继承。
当然,到底默认是public继承还是private继承,取决于子类而不是基类。我的意思是,struct可以继承class,
同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。如下:
struct A{};
class B : A{}; //private继承
struct C : B{}; //public继承
2)struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。
3)“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。
二、联系
c++中除了上述三点不同,struct和class完全是可以说一样的, 包括对C中struct的特性的兼容也是一样的。
例如,C++中的struct是对C中的struct的扩充,既然是扩充,那么它就要兼容过去C中struct应有的所有特性。C语言中你可以这样写:
struct A //定义一个struct
{
char c1;
int n2;
double db3;
};
A a={'p',7,3.1415926}; //定义时直接初始化
也就是说struct可以在定义的时候用{}初始化。
但是c++中struct想要用{}来赋初值,则它必须满足很多的约束条件,这些条件实际上就是让struct更体现出一种数据机构,即表现得和c语言中的struct的行为一模一样。
如果c++中的struct 和 class的行为表现得和c语言中的struct的行为一模一样,则它们都可以通过c语言里用来初始化struct的{}来初始化。这种方式兼容C语言中struct的特性。但是,如果一但struct 和 class的行为和c语言中的struct的行为不完全一样,即不是纯粹的一个数据结构的实现体,则不能通过{}来初始化。
那么如何判断c++中的struct 和 class的行为表现是否和c语言中的struct的行为一模一样呢?请参考我的另外一篇文章:
http://blog.csdn.net/nodeathphoenix/article/details/37672169
注意:
如果c++中的struct 和 class满足一定条件后,像c语言中的struct一样通过{}初始化, 则定义struct 和 class对象时, 不会调用struct 和 class的构造函数的.此时的struct 和 class就像是一个c语言中的struct,它本身是没有构造函数而且编译器也不会帮它生成默认的构造函数的.
相关文章推荐
- C++ 中 struct 和 class 的联系和区别
- c与c++中struct与class区别与联系
- C++中struct与class的区别以及联系
- C++ 中 struct 和 class 的联系和区别
- C++中struct与class的区别
- C++中class和struct的区别
- C++中结构体与类的区别(struct与class的区别)
- C++中struct与class的区别
- C++中struct和class的区别
- c++中struct和class的区别
- C++中struct和class的区别
- C++中struct和class定义类区别
- 关于C_C++中struct与class的区别
- c中的struct与c++中的class的区别
- struct和class有什么样的区别和联系
- 深入C++中struct与class的区别分析
- C++中class与struct的区别
- C++中class与struct的区别(struct的类型名同时可以作为变量名)
- C和C++中struct的区别 以及C++中struct和class 以及c和c++区别 引用和指针
- 标题:C++中struct与class的区别是什么?