什么是成员函数

在类中声明的函数就叫做成员函数

考虑用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++编程:成员函数相关推荐

  1. 《C++面向对象高效编程(第2版)》——3.11 类名、成员函数名、参数类型和文档...

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第3章,第3.11节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...

  2. 《C++面向对象高效编程(第2版)》——2.16 识别成员函数的目标对象

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第2章,第2.26节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区 ...

  3. 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修饰成员函数 相关教 ...

  4. C++编程进阶7(何时使用成员函数模板,模板类的实参推断与类型转换、继承与数组)

    二十六.何时使用成员函数模板 关于成员函数模板见https://blog.csdn.net/Master_Cui/article/details/111824152 成员函数模板主要用来兼容不同类型的 ...

  5. C++编程进阶5(内联函数、如何降低编译成本、处理继承体系中同名不同参的成员函数、私有虚函数)

    十七.内联函数 在https://blog.csdn.net/Master_Cui/article/details/106391552中,已经简单的说过内联函数的作用. 函数体较小的内联函数经过编译后 ...

  6. C++编程进阶3(如何写出正确的operator=、operator运算符的返回值以及是否应该是成员函数的讨论)

    八.如何写出一个安全的operator= 首先,operator=的返回值通常是一个类的引用,这一点需要和C++标准库的容器类的operator=保持一致 其次,如果一个类中含有指针成员,那么要防止自 ...

  7. 【笔试】:编程实现C++string 类成员函数

    http://blog.csdn.net/wangshihui512/article/details/9792309 已知String类声明如下: [cpp] view plaincopy print ...

  8. c ++类成员函数_C ++编程中的数据成员和成员函数

    c ++类成员函数 C ++中的数据成员和成员函数 (Data members and Member functions in C++) "Data Member" and &qu ...

  9. 在类内定义成员函数、在类外定义成员函数、计算长方体的体积【C++面向对象编程类的使用经典案例】

    文章目录 一.在类内定义成员函数 二.在类外定义成员函数(使用符号::) 三.计算3个长方体的体积(class成员函数) 一.在类内定义成员函数 #include <iostream> u ...

  10. 类的使用经典案例使用类的成员函数显示时间、找出元素的最大值【C++面向对象编程】

    文章目录 一.普通函数显示时间 二.使用类的成员函数显示时间 三.找出元素的最大值(使用类的成员函数) 一.普通函数显示时间 #include <iostream> using names ...

最新文章

  1. 当 AI 开始“入侵”人类
  2. [Linux] 进程间通信
  3. [译]星际争霸人工智能比赛——规则
  4. 再探ChannelPipeline 的初始化
  5. C++字符串转化为数字的库函数
  6. 摄影测量--后方交会
  7. 多线程处理list_跟大佬聊天,被反问Redis6的多线程真的能提高性能吗?
  8. 阿里官宣AI框架大牛贾扬清加盟,任职技术VP
  9. Java设计模式01:设计模式的 分类 和 设计原则
  10. 小程序仿微视_争抢流量!腾讯微视也要开始搞短视频带货
  11. 基于python的学生信息管理系统
  12. 计算机考研复试问题汇总(408+计算机前言知识)
  13. 上传 visio 2003 基本形状图谱
  14. 【RDMA】RDMA编程实例(IBV Verbs )
  15. Intellij (IDEA) 学生认证全流程
  16. 华为交换机查看端口对应的oid索引值
  17. Chapter 09–Storage Structure and Relationships
  18. 程序员 coding啥意思_使用Coding4Fun DevKit的vCard预览处理程序
  19. Beef的安装及基本使用
  20. 城市应急指挥系统建设方案(智慧应急综合管理平台)

热门文章

  1. 史蒂夫 乔布斯经典语录
  2. 《J2ME手机高级编程》实机:诺基亚 5310(XpressMusic)
  3. 命令提示符(cmd)中的tracert命令详解
  4. more effective c++——Item M30 代理类(三)隐式类型转换与代理类
  5. 用eclipse和Tomcat写一个简易聊天室
  6. 范冰冰募捐松下,很伟大还是很无耻?
  7. 不知道做什么副业,如何选择副业,副业的重要性
  8. 被scanf背刺后,告诉你想了解的缓冲区的一切
  9. 支付宝小程序60秒倒计时插件
  10. sequence基础