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(),用于计算两个数字的和和差。这两个方法都包含两个参数,分别表示要计算的数字。
访问控制
类方法的访问权限可以通过访问控制修饰符来控制,例如 public、private 和 protected。
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,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
C++ 类方法解析:内外定义、参数、访问控制与静态方法详解的更多相关文章
- Java构造和解析Json数据的两种方法详解二
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- Java构造和解析Json数据的两种方法详解二——org.json
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...
- Java构造和解析Json数据的两种方法详解一——json-lib
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...
- (转)Linux内核参数设置sysctl命令详解
Linux内核参数设置sysctl命令详解 原文:https://www.zhukun.net/archives/8064 sysctl是一个允许您改变正在运行中的Linux系统的接口. 它包含一些 ...
- springboot项目--传入参数校验-----SpringBoot开发详解(五)--Controller接收参数以及参数校验----https://blog.csdn.net/qq_31001665/article/details/71075743
https://blog.csdn.net/qq_31001665/article/details/71075743 springboot项目--传入参数校验-----SpringBoot开发详解(五 ...
- laravel 配置路由 api和web定义的路由的区别详解
1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...
- 《Java面试全解析》1000道面试题大全详解(转)
<Java面试全解析>1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃 ...
- [Go] 命令行参数解析包(flag 包)使用详解
Go 的 flag 包可以解析命令行的参数. 一.命令行语法 命令行语法主要有以下几种形式: cmd -flag // 只支持bool类型 cmd -flag=xxx cmd -flag ...
- php-fpm 启动参数及重要配置详解
约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...
- php-fpm 启动参数及重要配置详解<转>
原文地址 http://levi.cg.am/archives/3127 约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm. ...
随机推荐
- Zabbix“专家坐诊”第183期问答汇总
问题一 Q:老师,请问一下zabbix采集的数据怎么过滤,获取数据是nottime=20:30 notafter=3,怎么过滤出netafter=3 ?谢谢. A:过滤器设置如下图. 问题二 Q:大佬 ...
- .NET集成DeveloperSharp实现强大的AOP
(适用于.NET/.NET Core/.NET Framework)[目录]0.前言1.第一个AOP程序2.Aspect横切面编程3.一个横切面程序拦截多个主程序4.多个横切面程序拦截一个主程序5.优 ...
- 基于ESP8266的JSON解析实例分析
什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.采用完全独立于编程语言的文本格式来存储和表示数据.其简洁和层次结构清晰的特点使得 J ...
- day06-JavaScript03
JavaScript03 11.DOM 官方文档:https://www.w3school.com.cn/js/js_htmldom.asp 基本介绍: DOM全称是Document Object M ...
- 记springBoot一直报Exception authenticating MongoCredential.
项目场景: 场景:继上回docker安装好了mongo,然后自己本地项目尝试搭建使用连接mongo 问题描述: 按照别人写的文章教程一步步操作,最后自己本地尝试连接查询,跳出这个用户权限不够,发生了套 ...
- 回顾redis底层数据结构
参考,欢迎点击原文:https://blog.csdn.net/qq_38286618/article/details/102530020 https://www.cnblogs.com/jaycek ...
- dubbo 泛化调用场景下,如何调用下游的泛型对象入参
dubbo泛化调用时,除了java原生的collection,map泛型对象,业务自定义的泛型对象是不支持泛化调用的,无法正确的填充下游数据对象.两种解法: 泛化调用的时候把泛型具体类型的全限定类路径 ...
- NJUPT第二次积分赛小结与视觉部分开源
NJUPT第二次积分赛小结与视觉部分开源 跟队友连肝一周多积分赛,写了一堆屎山,总算是今天完赛了.结果也还行,80分到手.其实题目是全做完了的,但验收时我nt了没操作好导致丢了不少分,而且整个控制流程 ...
- linux权限、特殊权限、ACL控制
Linux基本权限 1.权限基本概述 1.什么是权限? 我们可以把它理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用 ...
- 三维模型3DTile格式轻量化的数据压缩与性能平衡关系分析
三维模型3DTile格式轻量化的数据压缩与性能平衡关系分析 对于三维模型的3DTile格式轻量化处理,数据压缩和性能之间的平衡关系是一个重要的考虑因素.以下是这两者关系的详细分析: 1.数据压缩与加载 ...