C++基础知识之struct和class的区别
来源:互联网 发布:美工岗位描述 编辑:程序博客网 时间:2024/06/01 08:00
struct是结构体,可以包含不同的数据类型;class是类,两者之间存在着一些主要的差别,如下所示:
1. struct的成员默认是public访问类型,而class的成员默认是private类型,这也体系了类的封装性;2. struct也可以继承,但默认是public继承,而class默认是private继承;2. struct一般只有成员变量而没有成员函数,而class既有成员变量也有成员函数,即封装了数据和对数据的操作;
两者最核心的区别在于:struct和class的默认访问权限和默认继承权限,示例如下:
struct Base{ Base() {} //默认的无参构造函数 Base(int Val_a) : a(Val_a) {} //自定义的有参构造函数 int a; int b; virtual int GetNum() const{return a;} //可以包含函数,虚函数};struct Derived : Base //默认的继承是public继承,而不是private继承{ int c; int d; inline int GetNum() const {return a;} };
代码解释:这个时候结构体Derived是public继承于结构体Base的。如果都将上面的struct改成class,那么Derived是private继承于struct Base的。这就是默认的继承访问权限。 所以我们在平时写类继承的时候,通常会这样写:class Derived : public Base就是为了指明是public继承,而不是用默认的private继承;
struct派生于class或者class派生于struct
struct Base //结构体{ Base() {} //默认的无参构造函数 Base(int Val_a) : a(Val_a) {} //自定义的有参构造函数 int a; int b; virtual int GetNum() const{return a;}};class Derived : Base //子类,此时默认的是private{ int c; int d; inline int GetNum() const {return a;}};
代码解释:前面已经说了,struct默认是public继承,而class默认是private继承。如果是class派生于struct,或者struct派生于class, 那么是public继承还是private继承呢?答案是取决于子类,也就是说如果子类是struct,则不管基类是struct还是class都是public继承;如果子类是class,则不管基类是struct还是class都是private继承,除非显式说明。
struct A{};class B : A{}; //private继承,因为子类是classstruct C : B{}; //public继承,因为子类是struct
个人还是推荐在继承的时候还是要显示地指出继承控制是public/private/protected;
struct和class的其它一些小区别
class可以用于定义模板参数,就像typename,而struct是不行的,如下所示:
template <class T> //可以用class定义模板参数class Base{ T Data;//定义一个T类型的成员变量}
struct的初始化方式: 如果struct只有成员变量,则可以直接赋值初始化,如下所示:
struct Base{ int a; int b;};Base BaseTest={1,2};//赋值a=1,b=2
但是如果在struct里面加上普通的函数,则仍然可以直接赋值初始化;如果struct里面包含了虚函数,则不能用直接赋值的方式进行初始化了,因为有了虚函数就应该有虚函数指针了;当然,如果class里面只有数据成员而没有虚函数,则也可以直接赋值初始化;
class Base {};Base BaseTest={...};//直接赋值初始化,OK
一个综合的演示示例:
#include "iostream"using namespace std;struct Base{ Base() {} //默认的无参构造函数 Base(int Val_a) : a(Val_a) {} //自定义的有参构造函数 int a; int b; virtual int GetNum() const{return a;}};class Derived : Base //子类是class,所以默认是private继承{public: //默认访问是private,所以要改成public int c; int d; inline int GetNum() const {return a;}};int main(){ Base BaseTest(1);//有参构造函数,OK BaseTest.b=2; Derived DerivedTest; DerivedTest.c=3; DerivedTest.d=4; cout<<BaseTest.GetNum()<<endl; return 0;}
综上所示:struct能够包含函数,能够包含构造和析构函数,能够包含虚函数和纯虚函数,能够实现多态,但默认是public访问和public继承;class默认是private访问,private继承;这一点体现出了面向对象的封装性;
- C++基础知识之struct和class的区别
- C#struct和class的区别
- [C#]class和struct的区别
- 【C++】class和struct的区别
- struct和class的区别
- struct和class的区别- -
- struct和class的区别
- class和struct的区别
- struct和class的区别
- struct和class的区别
- class 和 struct 的区别
- Struct 和 Class 的区别
- class和struct的区别
- Struct和Class的区别
- class和struct的区别
- struct和class的区别
- struct 和class的区别
- struct和class的区别
- Maven内置隐式变量
- Bjarne Stroustrup 语录
- MINIGUI学习总结一
- LintCode-带环链表 II
- NOIP2014联合权值——史上最强解析
- C++基础知识之struct和class的区别
- 前端优化总结
- 我的ROS入门(三):ubuntu-15.04-desktop-amd64配置ROS
- 浅谈多进程多线程的选择
- HDU 1978
- Subsets
- UVA 340 Master-Mind Hints
- Atom飞行手册翻译: 4.5 ~ 4.8
- EasyUI combotree 赋值