• 注意区别同名成员函数接口所属的类类型;

    BinNodePosi(T) BinNode<T>::insertAsLC(const T&);
    BinNodePosi(T) BinTree<T>::insertAsLC(BinNodePosi(T), const T&);

1. 成员函数的重载

  • 成员函数(包括构造函数)重载的目标一般是为客户端提供更为方便、灵活的接口,也即方便客户端的调用;
  • 一般而言,形参列表较长的会被形参列表更短的调用,自然需要为其指定一些默认的参数,或者说参数列表较多的服务与参数列表较短的。

2. 成员函数之间的关系

重载的成员函数之间存在foo的实现是基于与其构成重载的foo的实现的关系,不构成重载关系的成员函数之间自然也并非彼此独立、泾渭分明、井水不犯河水,也存在互相调用的关系。

以 Vector 元素去重的实现为例,需要借助区间内查找(find(e, lo, hi)),以及指定位置删除(remove(r))(而指定位置删除有需借助区间内删除):

template <typename T>
int Vector<T>::deduplicate(){int oldSize =_size;int i = 1;while (i < _size){find(_elem[i], 0, i) < 0 ? ++i : remove(i);}return oldSize - _size;
}

3. 自由度

构成重载的成员函数(乃至一般函数)之间,如果参数较多的成员函数被参数较少的成员函数所调用,几乎可以肯定的是,参数较多的成员函数相较参数较少的成员函数,具有较高的自由度。

所谓自由度,其实也是参数的设置。

4. 再论成员函数的重载:为什么需要众多的函数重载

构成重载的成员函数之间除了参数较短的调用参数较长的(指定一些默认参数)外(实现完全相同,只是参数的设置略有不同),有时也会提供完全不同的实现形式,当然是针对不同的场景,出于实际问题的考虑,比如对文件的读取操作,显然大文件和小文件的读取操作不应该相同。

5. 构造函数的参数

  • 构造函数的功能正在于为类的成员变量赋初值;一般提供以下构造函数:

    • 空参构造:默认值;
    • 含参构造:设置初始值;
    • 拷贝构造:将其他同一个类的实例化对象的成员变量的值,赋给自己的成员变量;

类内部除构造函数以外的其他成员函数,如何获取构造函数中的参数呢?
将构造函数的参数保存在类的成员变量中,此即为封装,将成员函数和成员变量封装在一起。

6. 更易型成员函数

对于一些更易型成员函数,比如数据结构的插入和删除操作(insert/delete),一定要检查类内部的成员变量是否需要做相应的更改(++_size/--_size)。

面向对象 —— 类设计(十)—— 成员函数相关推荐

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

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

  2. 面向对象——类设计(五)

    面向对象--类设计(一) 面向对象--类设计(二) 面向对象--类设计(三) 面向对象--类设计(四) (1)约定:私有成员函数:以下划线开头,_:公有成员函数则不必: 设计顺序 类首先是对成员变量的 ...

  3. 面向对象——类设计(二)

    面向对象--类设计(一) 拷贝构造函数 拷贝构造函数(copy ctor)和拷贝赋值(copy assignment)操作符: 编译器创建的版本只是单纯地将来源对象的每一个non-static成员变量 ...

  4. C++类的成员函数(在类外定义成员函数、inline成员函数)

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...

  5. 面向对象——类设计(一)

    如果一个类将自己的成员变量声明为protected,则该类很有可能作为多态基类 一个类的成员变量一般不声明为public(如果非声明为public不可的话,使用struct岂不是更好),而protec ...

  6. C++类的成员函数(在类外定义成员函数)

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...

  7. C++的成员函数声明与定义 —— 类外定义成员函数以及inline函数

    作者原文:https://www.cnblogs.com/wuchanming/p/4061654.html 类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它 ...

  8. 【C++从入门到踹门】第三篇:类和对象(中)类的默认成员函数

    目录 1.类的默认成员函数 2.构造函数 2.1 构造函数引入 2.2 构造函数概念及特点 3. 析构函数 3.1 析构函数引入 3.2 析构函数的概念 3.3 在哪些情况下会程序会执行析构函数? 3 ...

  9. C++ 学习 ::【基础篇:13】:C++ 类的基本成员函数:类类型成员的初始化与构造函数问题

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇.STL 篇.高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C++的三大特 ...

  10. C++>继承,继承方式及其比较,子类和父类对象指针,派生类的默认成员函数,虚继承,继承与友元,继承与静态成员

    继承 继承的概念与定义 概念: 继承是指一个子类(或称为派生类)继承父类(或称为基类)的特征(属性和操作).继承是面向对象程序设计时实现代码复用的重要手段,它允许在原有的类的基础上进行扩展,增加功能, ...

最新文章

  1. MyBatis的修改数据操作
  2. Servlet之Tomcat配置与启动(一)
  3. OpenGL中的二维编程——从简单的矩形开始
  4. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python异常处理)
  5. 65种GPU性能测试,AMD开源驱动领先!
  6. 开源程序识别图像像素点_开源浏览器扩展程序,可放大图像
  7. 【华为云技术分享】关于Linux下Nginx的安装及配置
  8. google支付接入PHP语言,PHP语言开发Paypal支付demo的具体实现
  9. strstr查找子字符串函数
  10. Java面向对象----抽象类
  11. Oracle 11g 字符集修改
  12. 小米4c android5.1,小米4c原版官方刷机包安卓5.1.1rom线刷包
  13. Google Java编程规范
  14. 通过两个栈实现一个队列(C语言)
  15. B、KB、MB、GB、T单位换算
  16. 外文论文阅读生词积累
  17. android实时声音信号波形_android绘制播放音频的波形图
  18. 有关Cidaemon.exe服务占用大量CPU资源的解决办法
  19. photoshop设计精讲精练 学习笔记(一)
  20. 为什么技术开发者应该读一读《浪潮之巅》

热门文章

  1. idea 断点调试 以及 tomcat 无法访问
  2. 设计模式(一)六大原则
  3. 创建List的应用小结
  4. java 文本变量_如何将一变量作为可配置文件 java
  5. bilibili怎么用用户名登录_b站(bilibili)账号只记得用户名忘了密码怎么办?实名认证能找回吗...
  6. 《自动驾驶网络解决方案白皮书》研读(一):电信产业自动驾驶网络探索与实践
  7. CUDA精进之路(四):图像处理——Sobel算子边缘检测
  8. 大数据系列1-规划安排
  9. 最大熵模型介绍及实现
  10. SURF 与 SIFT的共同点与区别