C++ class和struct到底有什么区别
2年前 (2024-04-27)
C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。
C++ 没有抛弃C语言中的 struct 关键字,其意义就在于给C语言程序开发人员有一个归属感,并且能让C++编译器兼容以前用C语言开发出来的项目。
在编写C++代码时,我强烈建议使用 class 来定义类,而使用 struct 来定义结构体,这样做语义更加明确。
小明的年龄是15,成绩是92.5
李华的年龄是16,成绩是96
这段代码可以通过编译,说明 struct 默认的成员都是 public 属性的,否则不能通过对象访问成员函数。如果将 struct 关键字替换为 class,那么就会编译报错。
C++中的 struct 和 class 基本是通用的,唯有几个细节不同:
使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。
class 继承默认是 private 继承,而 struct 继承默认是 public 继承(《C++继承与派生》一章会讲解继承)。
class 可以使用模板,而 struct 不能(《模板、字符串和异常》一章会讲解模板)。
C++ 没有抛弃C语言中的 struct 关键字,其意义就在于给C语言程序开发人员有一个归属感,并且能让C++编译器兼容以前用C语言开发出来的项目。
在编写C++代码时,我强烈建议使用 class 来定义类,而使用 struct 来定义结构体,这样做语义更加明确。
使用 struct 来定义类的一个反面教材:
运行结果:#include <iostream>
using namespace std;
struct Student{
Student(char *name, int age, float score);
void show();
char *m_name;
int m_age;
float m_score;
};
Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
void Student::show(){
cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}
int main(){
Student stu("小明", 15, 92.5f);
stu.show();
Student *pstu = new Student("李华", 16, 96);
pstu -> show();
return 0;
}
小明的年龄是15,成绩是92.5
李华的年龄是16,成绩是96
这段代码可以通过编译,说明 struct 默认的成员都是 public 属性的,否则不能通过对象访问成员函数。如果将 struct 关键字替换为 class,那么就会编译报错。
- 随机文章
- 宝马 马尔代夫 蜜月(宝马婚礼之行,度过梦幻马尔代夫蜜月)
- 武汉 马尔代夫 攻略(探秘武汉和马尔代夫旅游攻略)
- 塞班 长滩 马尔代夫(三个海岛目的地推荐,适合度假和浪漫旅行)
- 中国 马尔代夫 足彩(中马足彩,你选谁?)
- 冬天旅游马尔代夫(享受冬日阳光,马尔代夫度假旅行指南)
- 杀手 马尔代夫 游手好闲(马尔代夫旅游:放空配可爱小动物)
- 刚好去了马尔代夫(一个完美的度假胜地——马尔代夫之旅)
- 到马尔代夫带什么(马尔代夫旅行必备攻略,别忘带这些!)
- 到达马尔代夫文案(美丽马尔代夫:您梦寐以求的度假胜地)
- 吉林江南马尔代夫(吉林南部一处形如马尔代夫的美丽风光)
- 厦门马尔代夫住宿(厦门一家人造型奇特的马尔代夫度假屋)
- 马尔代夫香槟游泳(马尔代夫度假胜地开设香槟游泳项目)
- 日本旅游马尔代夫(日本游客最喜欢的度假胜地:马尔代夫)
- 海狼 马尔代夫(马尔代夫海狼现身,游客惊叹!)
- 武汉洪山马尔代夫(武汉洪山区推出马尔代夫主题旅游活动)
- 微商马尔代夫日常(马尔代夫微商生活日常,简单轻松赚钱)
- 泡面入境马尔代夫(泡面登陆马尔代夫酒店,备受游客好评)
- 梦见想去马尔代夫(梦到去马尔代夫,对此的恍惚感和憧憬)
- 松滋有马尔代夫吗(松滋也有独特海域景色,类似马尔代夫)
- 涿州马尔代夫美景(探索涿州马尔代夫美景,惊艳神奇世界)
- 徐州马尔代夫景点(徐州马尔代夫:水蓝沙白房车应有尽有)
- 汉口江滩马尔代夫(汉口江滩打造成为中国版“马尔代夫”)
- 淘宝马尔代夫大蒜(淘宝上可以购买到马尔代夫产的大蒜?)
- 磁县马尔代夫视频(磁县拍摄的马尔代夫旅游视频备受欢迎)
- 桂林马尔代夫风景(桂林山水:漫步马尔代夫般的度假天堂)
- 美景马尔代夫餐厅(重温美景,马尔代夫餐厅等待您的品尝)
- 没去马尔代夫旅游(旅行新体验:探索独特的马尔代夫之旅)
- 网红马尔代夫球场(马尔代夫球场现已成为网红打卡胜地!)
- 航拍马尔代夫美景(美轮美奂!航拍马尔代夫让人流连忘返)
- 欧洲直飞马尔代夫(欧洲出发直飞马尔代夫,度过美妙假期)
