2.5 C++类class和结构体struct区别
参考:http://www.weixueyuan.net/view/6337.html
总结:
在C++中,struct类似于class,在其中既可以定义数据成员,又可以定义成员函数。
在C++中,struct与class基本是通用的,唯一不同的是如果使用class关键字,类中定义的成员变量或成员函数默认都是private属性的,而采用struct关键字,结构体中定义的成员变量或成员函数默认都是public属性的。
C++语言继承了C语言的struct,并且加以扩充。在C语言中struct是只能定义数据成员,而不能定义成员函数的。而在C++中,struct类似于class,在其中既可以定义数据成员,又可以定义成员函数。
在C++中,struct与class基本是通用的,唯一不同的是如果使用class关键字,类中定义的成员变量或成员函数默认都是private属性的,而采用struct关键字,结构体中定义的成员变量或成员函数默认都是public属性的。
在C++中,没有抛弃C语言中的struct关键字,其意义就在于给C语言程序开发人员有一个归属感,并且能让C++编译器兼容以前用C语言开发出来的项目。
[例1] C++ struct 示例:
- #include<iostream>
- using namespace std;
- struct book
- {
- double price;
- char * title;
- void display();
- };
- void book::display()
- {
- cout<<title<<", price: "<<price<<endl;
- }
- int main()
- {
- book Alice;
- Alice.price = 29.9; //It’s OK
- Alice.title = "Alice in wonderland"; //It’s OK
- Alice.display(); //It’s OK
- return 0;
- }
在本例中,定义了一个名为book的struct,在其中定义有成员变量title和price,此外还声明了一个函数,该函数在struct内部声明,在结构体外部定义。
程序看到这里,不难发现,struct和class关键字在C++中其基本语法是完全一样的。接着,我们来看一下主函数。首先通过book结构体定义了一个对象Alice。通过成员选择符,Alice对象在接下来的三行代码中分别调用了book结构体中定义的变量及函数!
由此可见struct声明中,默认的属性为public属性,在struct外部可以随意访问。
[例2] C++ class 示例:
- #include<iostream>
- using namespace std;
- class book
- {
- double price;
- char * title;
- void display();
- };
- void book::display()
- {
- cout<<title<<", price: "<<price<<endl;
- }
- int main()
- {
- book Alice;
- Alice.price = 29.9; //compile error
- Alice.title = "Alice in wonderland"; // compile error
- Alice.display(); // compile error
- return 0;
- }
再来看例2,例2程序相对于例1,只改动了一处:将struct关键字替换为class关键字。结果,在主函数中定义Alice对象之后,我们再企图通过Alice对象访问其内部的price、title变量及display函数,此时编译器便会提示编译错误,错误提示为这三者是不可访问的。
正如我们所预料的那样,确实class中定义的成员变量或成员函数,默认的属性是private。
例3:
- class book
- {
- public:
- void setprice(double a);
- double getprice();
- private:
- double price;
- };
例4
例5:
- struct book
- {
- public:
- void setprice(double a);
- double getprice();
- private:
- double price;
- };
在前面小节中,我们定义了如例3所示的一个名为book的类,而与其相等价的struct定义则可以如例4所示,如果我们显式的在struct中将setprice和getprice成员函数声明为public属性,这也是可以的,如例5所示。
2.5 C++类class和结构体struct区别的更多相关文章
- C++/C#:类Class与结构体Struct的区别
C++中: 默认的访问控制.继承访问权限不同:struct时public的,class时 private的: 其它基本一样. C#中: struct是值类型,class是引用类型的: struct S ...
- C++学习13 类class和结构体struct的区别
C++保留了C语言的 struct,并且加以扩充.在C语言中,struct 只能包含数据成员,不能包含成员函数.而在C++中,struct 类似于 class,既可以包含数据成员,又可以包含成员函数. ...
- C++中的空类与空结构体大小
今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { }; int main() { ...
- C++类和结构体的区别
C++类和结构体的区别? 结构体默认数据访问控制是public; 类默认数据访问控制是private;
- 你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06
再续前文,在面向对象层面,Python做到了超神:万物皆为对象,而Ruby,则干脆就是神:飞花摘叶皆可对象.二者都提供对象类操作以及继承的方式为面向对象张目,但Go lang显然有一些特立独行,因为它 ...
- C语言的结构体和C++结构体的区别
关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...
- [C++] C/C++结构体的区别
C/C++结构体的区别 >_<:C中的结构体和C++中结构体的不同之处: 在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. >_<: ...
- Swift中元组(Tuples),结构体(Struct),枚举(Enums)之间的区别
Swift有许多种存储数据方式,你可以用枚举(enums),元组(tuples),结构体(structs),类(classes),在这篇文章中我们将比较枚举.元组.结构体之间区别,首先从最简单的开始- ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
随机推荐
- springboot中spring.profiles.include
springboot中spring.profiles.include的妙用. 我们有这样的一个springboot项目.项目分为开发.测试.生产三个不同阶段(环境),每个阶段都会有db.ftp.red ...
- JFinal3.0 sql管理与动态生成
原文: 本节学习目标主要是使用JFinal中自带的Template Engin来实现对sql的管理.JFinal中为sql管理提供了3个指令#sql.#para.#namespace,来增强sql功能 ...
- WPF打印涉及到的关键类
DocumentViewer--->FixedDocument----> PageContent ---->FixedPage
- Fetch的使用; Yarn命令集; NVM的管理;VueCLi3的使用;
如果喜欢使用lower-level,使用标准的 fetch API. 好处是无需额外的加载一个外部资源.但没有被浏览器完全支持,需要使用polyfill.因此使用Axios的更多一些. 参考Axios ...
- 使用C#读取网站相对路径文件夹下所有图片
public JsonResult GetCourseInitCover() { //设置相对路径 string imgurl = Server.MapPath("~/Content/ima ...
- Vue自动化工具(Vue-CLI)的安装
安装VUM 前面学习了普通组件以后,接下来我们继续学习单文件组件则需要提前先安装准备一些组件开发工具.否则无法使用和学习单文件组件. 一般情况下,单文件组件,我们运行在 自动化工具vue-CLI中,可 ...
- 牛客寒假算法基础集训营6 J-迷宫
题目请点这里 分析:这是一道BFS的模板题,构造一个队列,将每个满足条件的(不超过边界,不超过左右移动次数的限制)位置推入队列,如果不是障碍物且没到达过,就将可到达位置的个数加1 此外,注意这里的输入 ...
- php文件包含漏洞(利用phpinfo)复现
利用docker复现该漏洞,访问http://192.168.80.156:8080/phpinfo.php,可以看到页面出现phpinfo页面 再访问http://192.168.80.156:8 ...
- 第一阶段——站立会议总结DAY02
1.昨天做了什么:做出了一个大概的界面(APP的个人中心界面),有用户名信息和按钮. 2.今天准备做什么:因为仅是完成在页面上显示文字,而显示个人信息的化,想要做成微信的个人中心辣个样子. ①就是文字 ...
- 安装sql 2008步骤以及所遇到的问题
下载网址:http://www.xiazaiba.com/html/4610.html 安装步骤: 1. 在Windows7操作系统系,启动Microsoft SQL 2008安装程序后,系统兼容性 ...