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

C++编程学习(第35天)

类的成员函数

成员函数的性质

类的成员函数是类的一种,它的用法和作用与一般函数基本上是一样的,它也有返回值和函数类型,与一般函数的区别只是,它是属于一个类的成员,出现在类体中,它可以被指定为私有、公用或受保护的。

在类外定义成员函数

可以在类体中只对成员进行声明,而在类外进行函数定义。如

#include <iostream>
using namespace std;class Student
{
public:void display();			//公用成员函数原型声明
private:	int num;				//私有数据成员char sex;
};void Student::display()		//在类外定义display类函数
{cout << "num:" << num << endl;
}Student stu1, stu2;			//定义两个类对象

需要注意的是
在类体中直接定义函数时,不需要在函数名前面加上类名,成员函数在类外定义时,必须在函数名前面加上类名,予以限定“::”是作用域限定符或称作用域运算符,用它声明函数是属于哪个类的。

由于不同的类中可能有同名的函数,用作用域限定符加以限定,就明确地指明了是哪一个作用域的函数,也就是哪一个类的函数。

在类外定义成员函数,类函数必须先在类体中作原型声明,然后在类外定义。

内置成员函数

在类体中定义的成员函数的规模一般都很小,而系统调用函数的过程所花费的时间开销相对比较大,为了减少时间开销,如果在类体中定义的成员函数中不包括循环等控制结构,C++系统自动地对它们作为内置函数来处理。

C++要求对一般的内置函数要用关键字inline声明。但对类内定义的成员函数,可以省略inline,因为这些成员函数已被隐含地指定为内置函数。

如果成员函数不在类体内定义,而在类体外定义,系统并不把它默认为内置函数,调用这些成员函数的过程和调用一般函数的过程是相同的,如果想将这些成员函数指定为内置函数,应当用inline作显示声明。

成员函数的存储方式

用类定义对象时,系统会为每一个对象分配存储空间。

同一类的不同对象中的数据成员的值一般是不相同的,而不同对象的函数的代码是相同的,不论调用哪一个对象的函数的代码,其实调用的都是同样内容的代码。

每个对象占用的存储空间只是该对象的数据成员所占用的存储空间,而不包括函数代码所占用的存储空间。

需要说明的是

1、不论成员函数在类内定义还是在类外定义,成员函数的代码段的存储方式是相同的,都不占用对象的存储空间。

2、不要将成员函数的这种存储方式和inline函数的概念混淆,不论是否用inline声明,成员函数的代码段都不占用对象的存储空间,inline函数只影响程序的执行效率,而与成员函数是否占用对象的存储空间无关。

3、虽然成员函数并没有放在对象的存储空间中,但从逻辑的角度,成员函数是和数据一起封装在一个对象中的,只允许本对象中成员的函数访问同一对象中的私有数据。

http://www.dtcms.com/a/392175.html

相关文章:

  • SS443A 霍尔效应传感器:高性能磁感应解决方案
  • MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
  • GitHub 热榜项目 - 日榜(2025-09-20)
  • 怎么判断 IP是独享的
  • Linux多进程编程(上)
  • 如何在Spring Boot项目中添加自定义的配置文件?
  • 【MySQL初阶】01-MySQL服务器和客户端下载与安装
  • AI搜索的下一站:多模态、个性化与GEO的道德指南
  • OpenLayers地图交互 -- 章节四:修改交互详解
  • Gradle插件的分析与使用
  • 如何避免everything每次都重建索引
  • 基于SIFT+flann+RANSAC+GTM算法的织物图像拼接matlab仿真,对比KAZE,SIFT和SURF
  • 笔记:现代操作系统:原理与实现(3)
  • 【智能系统项目开发与学习记录】Docker 基础
  • 数据展示方案:Prometheus+Grafana+JMeter 备忘
  • flask获取ip地址各种方法
  • 17.6 LangChain多模态实战:语音图像文本融合架构,PPT生成效率提升300%!
  • MyBatis实战教程:SQL映射与动态查询技巧
  • 在 Windows Docker 中通过 vLLM 镜像启动指定大模型的方法与步骤
  • 分类预测 | Matlab实现SSA-BP麻雀搜索算法优化BP神经网络多特征分类预测
  • GO实战项目:基于 `HTML/CSS/JS + Gin + Gorm + 文心一言API`AI 备忘录应用
  • 数据结构【堆(⼆叉树顺序结构)和⼆叉树的链式结构】
  • 我爱学算法之—— 位运算(下)
  • LeetCode第364题_加权嵌套序列和II
  • 云计算和云手机之间的关系
  • 胡服骑射对中国传统文化的影响
  • leetcode-hot-100 (多维动态规划)
  • Chromium 138 编译指南 Ubuntu 篇:depot_tools安装与配置(三)
  • 在Ubuntu 16.04上安装openjdk-6/7/8-jdk的步骤
  • 小杰机器学习高级(four)——基于框架的逻辑回归