C/C++编程:成员函数
什么是成员函数
在类中声明的函数就叫做成员函数
考虑用struct实现日期的概念:定义Date的表示方式和操作这种类型的变量的一组函数:
struct Date{int d, m, y;
};void init_date(Date &d, int, int, int); //初始化
void add_year(Date &d, int );
void add_month(Date &d, int );
void add_day(Date &d, int );
数据类型,Date和这些函数之间并无显式关联。我们可以通过将函数声明为成员来建立这种关联:
struct Date{int d, m, y;//成员函数void init_date( int, int, int); //初始化void add_year(int );void add_month(int );void add_day( int );
};
由于不同结构可能有同名成员函数,在定义成员函数时必须指定结构名
void Date::init_date( int yy, int mm, int dd){y = yy;m = mm;d = dd;
}
分类
静态/非静态
成员函数是静态或非静态的。
静态成员函数
语法:
说明:
- 静态成员函数不关联到任何对象。调用时,它们无 this 指针。
- 它只能访问类的静态数据成员
- 静态成员函数不能为 virtual、const 或 volatile。
- 静态成员函数的地址可以存储在常规的函数指针中,但不能存储于成员函数指针中。
非静态成员函数
- 非静态成员函数是声明于类的成员说明中,不带 static 或 friend 说明符的函数。
class S {int mf1(); // 非静态成员函数声明void mf2() volatile, mf3() &&; // 可为 cv 限定或引用限定int mf4() const { return data; } // 可内联定义virtual void mf5() final; // 可为虚函数,可使用 final/overrideS() : data(12) {} // 构造函数亦是成员函数int data;
};
int S::mf1() { return 7; } // 若不内联定义,则必须定义于命名空间
总结:静态成员函数的行为与其他成员函数的行为不同,因为静态成员函数没有隐式this
自变量。 非静态成员函数具有 this
指针。
内联/非内联
内联成员函数
成员函数的定义可以在类中实现,也可以在类外实现(无论是静态的还是非静态的)。
如果在类声明的内部定义一个成员函数,那么该函数会被视为内联函数,并且不需要用其类名来限定函数名称。当然,我们也可以用inline
来显式标记这是一个内联函数
class Account
{public:// Deposit是一个内联成员函数double Deposit( double HowMuch ){balance += HowMuch;return balance;}
private:double balance;
};int main()
{}
如果成员函数的定义在类声明的外部,则仅当它显式声明为时,才会将其视为内联函数 inline 。 此外,必须通过范围解析运算符 (:
C/C++编程:成员函数相关推荐
- 《C++面向对象高效编程(第2版)》——3.11 类名、成员函数名、参数类型和文档...
本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第3章,第3.11节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...
- 《C++面向对象高效编程(第2版)》——2.16 识别成员函数的目标对象
本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第2章,第2.26节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...
- c/c++教程 - 2.4.3 this指针作用,链式编程思想,空指针访问成员函数,const修饰成员函数,常函数,常对象
目录 4.3 C++对象模型和this指针 4.3.1 成员变量和成员函数分开存储 4.3.2 this指针概念(非常重要) 4.3.3 空指针访问成员函数 4.3.4 const修饰成员函数 相关教 ...
- C++编程进阶7(何时使用成员函数模板,模板类的实参推断与类型转换、继承与数组)
二十六.何时使用成员函数模板 关于成员函数模板见https://blog.csdn.net/Master_Cui/article/details/111824152 成员函数模板主要用来兼容不同类型的 ...
- C++编程进阶5(内联函数、如何降低编译成本、处理继承体系中同名不同参的成员函数、私有虚函数)
十七.内联函数 在https://blog.csdn.net/Master_Cui/article/details/106391552中,已经简单的说过内联函数的作用. 函数体较小的内联函数经过编译后 ...
- C++编程进阶3(如何写出正确的operator=、operator运算符的返回值以及是否应该是成员函数的讨论)
八.如何写出一个安全的operator= 首先,operator=的返回值通常是一个类的引用,这一点需要和C++标准库的容器类的operator=保持一致 其次,如果一个类中含有指针成员,那么要防止自 ...
- 【笔试】:编程实现C++string 类成员函数
http://blog.csdn.net/wangshihui512/article/details/9792309 已知String类声明如下: [cpp] view plaincopy print ...
- c ++类成员函数_C ++编程中的数据成员和成员函数
c ++类成员函数 C ++中的数据成员和成员函数 (Data members and Member functions in C++) "Data Member" and &qu ...
- 在类内定义成员函数、在类外定义成员函数、计算长方体的体积【C++面向对象编程类的使用经典案例】
文章目录 一.在类内定义成员函数 二.在类外定义成员函数(使用符号::) 三.计算3个长方体的体积(class成员函数) 一.在类内定义成员函数 #include <iostream> u ...
- 类的使用经典案例使用类的成员函数显示时间、找出元素的最大值【C++面向对象编程】
文章目录 一.普通函数显示时间 二.使用类的成员函数显示时间 三.找出元素的最大值(使用类的成员函数) 一.普通函数显示时间 #include <iostream> using names ...
最新文章
- 当 AI 开始“入侵”人类
- [Linux] 进程间通信
- [译]星际争霸人工智能比赛——规则
- 再探ChannelPipeline 的初始化
- C++字符串转化为数字的库函数
- 摄影测量--后方交会
- 多线程处理list_跟大佬聊天,被反问Redis6的多线程真的能提高性能吗?
- 阿里官宣AI框架大牛贾扬清加盟,任职技术VP
- Java设计模式01:设计模式的 分类 和 设计原则
- 小程序仿微视_争抢流量!腾讯微视也要开始搞短视频带货
- 基于python的学生信息管理系统
- 计算机考研复试问题汇总(408+计算机前言知识)
- 上传 visio 2003 基本形状图谱
- 【RDMA】RDMA编程实例(IBV Verbs )
- Intellij (IDEA) 学生认证全流程
- 华为交换机查看端口对应的oid索引值
- Chapter 09–Storage Structure and Relationships
- 程序员 coding啥意思_使用Coding4Fun DevKit的vCard预览处理程序
- Beef的安装及基本使用
- 城市应急指挥系统建设方案(智慧应急综合管理平台)