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 ...
随机推荐
- CrystalReports2007安装包
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\CrystalReports10_5\CRRedist2008_ ...
- Win10 | Mac 在server上统一办公
一个非常实际的问题,通常我们主要有三个工作的地点:1,server,用于大型数据的分析和处理:2,办公室的电脑,正式办公:3.自己的电脑,偶尔加班. 不同的工作平台之间很难同步,导致我们的工作和思维分 ...
- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: ..... this is incompatible with sql_mode=only_full_group_by
一.异常信息 org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: com.mysq ...
- hammer.js方法总结(只做了一个简单的demo)
html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- 【洛谷p2669】【一本通p1100】金币
(今天高产) 金币[传送门] 洛谷上的算法标签 自我感觉主要靠循环 这道题是2015年NOIp普及组的题,其实还是很简单的.但为什么写这道题呢? 这道题第一次接触是在一本通刷题的时候,当时学循环结构, ...
- 148. Sort List (java 给单链表排序)
题目:Sort a linked list in O(n log n) time using constant space complexity. 分析:给单链表排序,要求时间复杂度是O(nlogn) ...
- 删除 github 相应仓库下的文件(不删除仓库)
1.git clone url(仓库的ssh) 将仓库克隆 到本地 2.进入到本地仓库文件夹 将想要删除的文件删除 3.右键 git bash here 4.git add . 5.git comm ...
- zsh切换bash bash切换zsh
切换bash(需要sudo) chsh -s /bin/bash 切换zsh(不需要sudo) chsh -s /bin/zsh 注意:如果输入命令和密码后提示:no change made. 请加上 ...
- sun.misc.BASE64Encoder图片编码,并在页面显示
Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.在上面的Data URI中,data表示取得数据的协定名称,image/pn ...
- NOSQL -- Mongodb的简单操作与使用(win10)
NOSQL -- Mongodb的简单操作与使用(wins) MongoDB 创建集合: db.createCollection(name, options) use huhu db.createCo ...