C++ 类方法解析:内外定义、参数、访问控制与静态方法详解

C++ 类方法

类方法,也称为成员函数,是属于类的函数。它们用于操作或查询类数据,并封装在类定义中。类方法可以分为两种类型:

  • 类内定义方法: 直接在类定义内部声明和定义方法。
  • 类外定义方法: 在类定义内部声明方法,并在类外部单独定义方法。

类内定义方法

在类定义内部可以直接声明和定义方法,这是一种简洁的方式。

示例:

class Person {
public:void introduce() {cout << "Hello, my name is " << name << endl;}string name; // 属性
};int main() {Person p1;p1.name = "Alice";p1.introduce(); // 调用类内定义的方法return 0;
}

在这个例子中,Person 类包含了一个名为 introduce() 的方法,用于打印对象的姓名。

类外定义方法

为了提高代码的可读性和维护性,有时会将方法定义移至类外部。这种情况下,需要在类内部先声明方法,然后再在类外部单独定义方法。

示例:

class Person {
public:void introduce(); // 方法声明string name; // 属性
};// 在类外部定义方法
void Person::introduce() {cout << "Hello, my name is " << name << endl;
}int main() {Person p1;p1.name = "Bob";p1.introduce(); // 调用类外定义的方法return 0;
}

方法参数

类方法可以包含参数,用于传递数据并影响方法的行为。

示例:

class Calculator {
public:int add(int a, int b); // 声明带两个参数的方法int subtract(int a, int b); // 声明带两个参数的方法
};// 在类外部定义方法
int Calculator::add(int a, int b) {return a + b;
}int Calculator::subtract(int a, int b) {return a - b;
}int main() {Calculator calc;int sum = calc.add(5, 3); // 调用带参数的方法int difference = calc.subtract(10, 7);cout << "Sum: " << sum << endl;cout << "Difference: " << difference << endl;return 0;
}

在这个例子中,Calculator 类包含了两个方法:add()subtract(),用于计算两个数字的和和差。这两个方法都包含两个参数,分别表示要计算的数字。

访问控制

类方法的访问权限可以通过访问控制修饰符来控制,例如 publicprivateprotected

  • public:方法可以在类外部的任何地方调用。
  • private:方法只能在类的内部调用。
  • protected:方法可以在类的内部或其子类中调用。

静态方法

静态方法与类本身相关,而不是与特定对象的实例相关。静态方法不需要创建对象就可以调用,通常用于定义与类相关的实用程序函数。

要声明静态方法,请在方法声明前使用 static 关键字。

示例:

class MathUtils {
public:static int square(int x); // 声明静态方法static int cube(int x); // 声明静态方法
};// 在类外部定义静态方法
int MathUtils::square(int x) {return x * x;
}int MathUtils::cube(int x) {return x * x * x;
}int main() {int result1 = MathUtils::square(5); // 调用静态方法int result2 = MathUtils::cube(3);cout << "Square: " << result1 << endl;cout << "Cube: " << result2 << endl;return 0;
}

在这个例子中,MathUtils 类包含了两个静态方法:square()cube(),用于计算数字的平方和立方。这些方法不需要创建对象就可以调用,直接使用类名即可。

总结

类方法是 C++ 面向对象编程的重要组成部分,用于封装类行为并提供对类数据的操作。通过理解类内和类外定义方法、方法参数、访问控制和静态方法等概念,您可以有效地利用类方法来构建

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注


http://www.ppmy.cn/embedded/35012.html

相关文章

【Linux】进程终止

思维导图 学习内容 进程终止是进程控制里面的一个重要的知识&#xff0c;通过这一篇博客&#xff0c;我们可以学习到进程终止的概念&#xff0c;进程终止的三种情况&#xff0c;进程终止的退出码和退出信号&#xff0c;最后在来学习进程是如何进行终止的。 学习目标 进程终止…

USB3.0

用万用表测量电容&#xff0c;电阻的好坏&#xff1a; 直接用万用表的电容档位测量电容的值&#xff0c;若所测值与电容表面所写或原理图中电容大小一样的话则判断电容是好的&#xff0c;否则是坏的。电阻一样。 有时候万用表并不好用&#xff0c;LCR仪则更为准确&#xff1a…

与 Apollo 共创生态:Apollo 7 周年大会的启示与心得

文章目录 前言Apollo X 全新征程Application X 企业预制套件总结 前言 在过去的七年中&#xff0c;Apollo 开放平台经历了一段令人瞩目的发展历程。从最初的构想到如今的成熟阶段&#xff0c;Apollo 已经推出了 13 个版本&#xff0c;吸引了来自全球 170 多个国家和地区的 16 …

自编String类型(C++)

设计思路&#xff1a; 首先自己编写了左移运算符的重载&#xff0c;方便后续测试时输出该String类 对于to_lower_case函数&#xff0c;遍历字符串&#xff0c;并修改所有大写字母。对于to_int函数&#xff0c;从头向尾遍历字符串&#xff0c;将每个数字字符转化为数字&#xf…

2024-2034年,量子密码市场年增长率将达29.3%

Visiongain发布了一份新报告&#xff0c;题为《2024-2034年量子密码市场报告》&#xff1a;按组件&#xff08;软件、硬件&#xff09;、软件&#xff08;加密算法、密钥管理解决方案等&#xff09;、硬件&#xff08;量子密钥分发&#xff08;QKD&#xff09;设备、量子随机数…

【漏洞复现】某小日子太阳能系统DataCube3审计

漏洞描述 某小日子太阳能系统DataCube3终端测量系统 多个漏洞利用方式 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进…

微信一键登录怎么做的?流程是什么?

实现方法&#xff1a;三种方法 点击【登录】按钮 》(系统框)绑定手机号》如果绑定:登录成功点击【登录】按钮》直接登录成功了 >后续可以在设置中【绑定手机号】点击【登录】按钮 -》 打开一个新的页面(绑定手机号):自己的表单 -》进行手机号绑定的验证 方式一:业务流程)用…

AI大模型探索之路-训练篇7:大语言模型Transformer库之HuggingFace介绍

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

为什么技术面一般不谈薪资?

我这些年做了很招聘工作&#xff0c;一般都被告知在技术面时不谈论薪资。 其实我一直觉得挺麻烦的&#xff0c;这人不就是我决定要不要吗&#xff1f; 我除了评估技术能力是否合格&#xff0c;再根据开价情况来做决定不就完事吗。每次面完我再等着HR去谈完薪资&#xff0c;然…

redis数据结构

redis优势 Redis是缓冲中间件,是C语言编写的基于内存的高速缓存数据库,key-value存储系统结构,包含丰富的数据类型,string,list,set,zset,hash Redis中提供很多功能 缓存&#xff0c;事件发布或订阅&#xff0c;高速队列等场景丰富数据结构用于直接存取基于内存速度快可持久…

【MySQL | 第十一篇】一条SQL语句在MySQL的执行过程

文章目录 11.一条SQL语句在MySQL的执行过程11.1MySQL整体架构11.2SQL语句在Server层执行流程11.3拓展&#xff1a;InnoDB存储引擎的更新操作11.3.1问题&#xff1a;为什么写了redolog日志还要写binlog日志&#xff1f;11.3.2问题&#xff1a;为什么要两阶段提交&#xff1f;11.…

SCP收容物161~170

注 &#xff1a;此文接SCP收容物141~150,本文只供开玩笑 ,与steve_gqq_MC合作 --------------------------------------------------------------------------------------------------------------------------------- 目录 scp-161 scp-162 scp-163 scp-164 scp-165 …

批量剪辑利器:视频随机分割,创意无限,高效剪辑视频

在视频制作和编辑的过程中&#xff0c;剪辑是一项至关重要的技术。对于需要处理大量视频素材的用户来说&#xff0c;批量剪辑不仅能提高工作效率&#xff0c;还能为视频内容带来创意和多样性。随着技术的发展&#xff0c;一些高效的剪辑工具逐渐崭露头角&#xff0c;其中视频随…

2023年广东省大学生程序设计竞赛题解

比赛链接&#xff1a;The 2023 Guangdong Provincial Collegiate Programming Contest 文章目录 A. Programming Contest&#xff08;签到&#xff09;B. Base Station Construction&#xff08;单调队列优化dp&#xff09;C. Trading&#xff08;排序&#xff09;D. New House…

HTML_CSS学习:CSS像素与颜色

一、像素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>像素</title> </head><style>.atguigu1{/*单位可以是cm&#xff0c;但不能是m,dm*/width: 1cm;height: 1cm;background-c…

C++手写协程项目(协程实现线程结构体、线程调度器定义,线程挂起函数、线程切换函数、线程恢复函数、线程结束函数、线程结束判断函数,模块测试)

协程结构体定义 之前我们使用linux下协程函数实现了线程切换&#xff0c;使用的是ucontext_t结构体&#xff0c;和基于这个结构体的四个函数。现在我们要用这些工具来实现我们自己的一个线程结构体&#xff0c;并实现线程调度和线程切换、挂起。 首先我们来实现以下线程结构体…

触摸OpenNJet,感悟云原生

小程一言 云原生使得应用充分利用云计算、容器化和微服务架构等现代技术来构建和运行应用程序。 云原生技术的用处在于提高应用程序的可靠性、可伸缩性和灵活性&#xff0c;加快开发和部署速度&#xff0c;降低成本&#xff0c;提升整体的效率和竞争力。通过采用云原生技术&a…

thinkphp5.1 新建模块

thinkphp5.1 新建模块 在ThinkPHP5.1中&#xff0c;创建一个新模块的步骤如下&#xff1a;使用命令行工具创建模块目录结构。 在模块目录中创建相应的文件和目录。 以下是具体的操作步骤和示例代码&#xff1a; 1. 使用命令行工具进入到项目的根目录下&#xff0c;执行以下…

60张图,告诉你IT运维方案的关键

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 我的网工朋友大家好。 在公司打工的哪里会不懂&#xff0c;有一个靠谱的、整体的运维计划&#xff0c;简直IT行业的主心骨。 但是&#xff0c;说…