当前位置: 首页 > news >正文

C语言类的基本语法详解

1、由C语言的结构体进入到C++中的类

我们在C语言中当需要定义多个变量的数据集合时,第一时间会想到使用结构体来进行定义,例如我们定义一个学生变量,包含姓名、年龄、性别等信息,代码示例如下:

1

2

3

4

5

structStudent{

charname[12];

intage;

charsex[4];

};

但是到了C++用,由于C++面向对象的语法特性,给struct关键字进行了升级,不仅仅可以在struct中定义变量,还可以定义函数,也由此可利用struct来定义一个学生类。代码示例如下:

1

2

3

4

5

6

7

8

9

10

11

structStudent{

charname[12];

intage;

charsex[4];

voidshow()

{

cout<<"姓名:"<<name<<endl;

cout<<"年龄:"<<age<<endl;

cout<<"性别:"<<sex<<endl;

}

};

如上所示在C++中利用struct关键字定义了一个学生类,因为C++是兼容C的,所以该类在使用时,可以当作Student结构体来使用,也可以当作Student类来使用,(一定是在C++中!!!)两种使用如下:

1

2

3

4

//作Student结构体来使用

structStudent strs;

//作Student类来使用

Student clas;

2、C++中如何定义类?

C++中定义类的语法格式为class 类名;下面直接上代码示例:

1

2

3

4

5

classclassName

{

// 类体:由成员函数和成员变量组成

};// 一定要注意后面的分号

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。
类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。

3、C++中实例化一个对象

C++中对象的实例化可以理解成有一个类模具,根据这个类模具制造出来了许多与类中特性相同的产品。利用学生类实例学生对象,示例如下:

1

2

3

4

5

Student s1;

Student s2;

Student s3;

//s1、s2、s3这些都是类的实例化对象,一个类可以实例化无限个对象

//并且这些对象都是不相关的。

4、C++类的访问限定及其封装 C++中的访问限定符

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。

C++中的访问限定符有public、private、protected
1、public修饰的成员在类外可以直接被访问
2、protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3、访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4、class的默认访问权限为private,struct为public(因为struct要兼容C)

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。(可以理解为被封装起来的数据只能在类中直接访问,在类外如果需要访问时,需要借助类中已经写好的函数来进行操作)对上面的学生类进行封装,代码示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

classStudent{

private:

charname[12];

intage;

charsex[4];

public:

voidshow()

{

cout<<"姓名:"<<name<<endl;

cout<<"年龄:"<<age<<endl;

cout<<"性别:"<<sex<<endl;

}

};

5、C++中类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域。如果要在类外实现类中声明的方法,要先进行::的操作,声明属于哪一个类。代码示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

classStudent{

private:

charname[12];

intage;

charsex[4];

public:

voidshow();

};

voidStudent:: show

{

cout<<"姓名:"<<name<<endl;

cout<<"年龄:"<<age<<endl;

cout<<"性别:"<<sex<<endl;

}

6、成员变量和方法在类中是如何存储的?

先来看一段代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

classStudent {

private:

charname[12];

intage;

charsex[4];

public:

voidshow();

};

intmain()

{

Student s1;

cout<<sizeof(s1)<<endl;

return0;

}

结果如图所示:

为什么会是二十哪?show函数的存储不在类中吗?
正是如此!一个类的大小,实际就是该类中”成员变量”之和,当然也要进行内存对齐,注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。而类中的方法都被放到类外的同一块空间,这样做是避免在实例化对象的时候,放在方法的重复定义开辟不必要的内存空间,造成空间浪费。

http://www.jsqmd.com/news/727322/

相关文章:

  • ARIMA模型保存与部署实战指南
  • 终极指南:如何用Obsidian Style Settings插件轻松自定义笔记外观
  • 别再只盯着模型结构了!用Python和PyTorch给你的模型推理加上TTA(测试时增强),轻松涨点几个百分点
  • 别乱用滤波!Zygo MetroPro软件里这9种滤波算法,到底该怎么选?(附实战对比图)
  • 终极小说下载解决方案:novel-downloader 深度解析与完全指南
  • 别再只用GO/KEGG了!用R语言做GSEA分析,轻松看懂通路是激活还是抑制
  • 4月30日成都地区包钢产热轧H型钢(1998-Q355B;100-1000mm)批发价格 - 四川盛世钢联营销中心
  • Fast-GitHub技术深度解析:如何实现10倍速的GitHub访问优化
  • Windows热键冲突终极排查指南:快速定位占用快捷键的幕后黑手
  • 终极Android滑动布局解决方案:ConsecutiveScrollerLayout让复杂界面丝滑如流
  • Her自定义请求:5种方式扩展你的API调用
  • 避坑指南:UE动画蓝图状态机变量设置与外部调用的那些事儿
  • 2026年深度改写模式和普通模式效果对比:降AI力度与文本保留度横评
  • 网盘直链下载助手终极指南:八大网盘一键获取真实下载链接,告别限速烦恼
  • 4月30日成都地区重钢产无缝钢管(8163-20#;外径38-114mm)批发价格 - 四川盛世钢联营销中心
  • 抖音直播数据采集终极指南:高效应对匿名用户与隐私保护挑战
  • 罗兰艺境“1+11”GEO技术落地,赋能上海制造隐形冠军 - 罗兰艺境GEO
  • Prusa-Firmware配置与定制化:打造专属3D打印体验
  • 保姆级教程:手把手教你用ADB Dumpsys命令深度分析Android应用状态(附查找秘籍)
  • ArchivePasswordTestTool:3分钟快速找回遗忘压缩包密码的终极免费方案
  • 智能网页数据抓取工具WebSeek的技术解析与应用
  • 告别白模!用Unity ProBuilder给你的场景原型快速上色与赋予材质(2021/2022版通用)
  • 使用Taotoken管理多项目API密钥并设置访问权限与审计
  • 全国冲孔板厂家排行:品质与供货能力实测对比 - 奔跑123
  • AI写论文看这里!4款AI论文写作工具,解决写期刊论文的难题!
  • Sakana!石蒜模拟器完全指南:从拖拽弹跳到陀螺仪控制的10个核心功能解析
  • 告别乱码!在统信UOS上为Wine配置完美中文字体的保姆级指南(以安装Apabi阅读器为例)
  • 灾难恢复专家稀缺报告
  • 如何快速集成gpt-repository-loader与重构影响缓解工具:完整API指南
  • 2026年AI模型接口加速站亲测:OpenAI兼容、计费透明与稳定性权衡全解析