第二章 面向对象的编程风格

2.1 如何撰写函数

函数定义四要素:函数的返回类型、函数的名称、函数的参数列表、函数体

占位符(placeholder) 函数原型(function prototype)

exit() 头文件cstdlib

求某个类型的最小最大值,可查询标准程序库中的numeric_limits class

#include <limits>
cout << numeric_limits<int>::max();

巧用default

switch(pox){default:case 2:cout << "1 ";case 1:cout << "1 ";break;
}

当超过2的时候全部输出1 1

2.2 调用一个函数

传址(by reference)、传值(by value)

void display( const vector<int> &vec)
加上const可以让阅读程序的人了解,我们以传址的方式来传递vector,为的是避免复制操作,而不是为了在函数之中对它进行修改。
等同于 void display( const vector<int> *vec);
比较:
效果相同,传递的都是对象的地址。
用法不同,一个*号,一个&号
pointer可能(也可能不)指向某个实际对象。当我们提领pointer时,一定要先确定其值并非为0,至于reference则必定会代表某个对象,所以不须检查。

生存空间(scope) 生存范围(extent) 局部对象(local object)

内置类型的对象,如果定义在file scope之内,必定被初始化为0,但如果它们被定义于local scope之内,那么除非程序员指定其初值,否则不会被初始化。

heap memory(堆内存) new表达式的另一种形式允许我们指定初值
int *pi; pi = new int(1024); //这不是之前的构造函数语法么
delete pi; 不需要检验pi是否为零,编译器会替我们检查 if(pi != 0) //define NULL 0

2.3 提供默认参数值(Default Parameter Values)

调试时候用

默认参数值从最右边开始进行。
默认值只能指定一次,可以在函数声明处,也可以在定义处。一般放在声明处。

void bubble_sort( vector<int> &vec, ofstream *ofil = 0){    if(!ofil){...} }
bubble_sort(vec);//不会产生调试信息
ofstream ofil( "data.txt" );
bubble_sort(vec, &ofil);//会产生调试信息void bubble_sort( vector<int> &vec,ostream &ofil=cout)
bubble_sort(vec, ofil);    //调用,不用加取值符

ostream    处理流,基类,写
istream    处理流,基类,读
iostream    处理流,基类,读写ofstream   处理文件流,子类,写
ifstream    处理文件流,子类,读
fstream    处理文件流,子类,读写istringstream    从string读取数据
ostringstream    向string写入数据
stringstream    读写string

头文件可为函数带来更高的可见度

2.4 使用局部静态变量(local static objects)

局部静态对象所处的内存空间,即使在不同的函数调用过程中,依然持续存在。

static vector< int > elems;
elems.push_back( elems[ix-1]+elems[ix-2] );

vector class 提供有内存自动管理机制,动态内存。

2.5 声明一个 inline 函数

体积小,常被调用
inline函数的定义常常被置于头文件中

类内定义的函数被默认成内联函数。关键字inline 必须与函数定义体放在一起才能使函数成为内联

2.6 提供重载函数(overloaded functions)

返回值、函数名相同,参数列表不同(类型不同,个数不同,顺序不同(string s1, int s2)和(int s2, string s1)(本质还是类型不同))

2.7 定义并使用template functions(模版函数)

将参数列表中指定的所有(或部分)参数的类型信息抽离出来

加入类型为ostream的第三参数,并将其预设参数值为 cout,是更具弹性的一种做法。

template <typename elemType>
void display_message( const string &msg, const vector<elemType> &vec){cout << msg;for ( int ix = 0; ix < vec.size(); ++ix ){elemType t = vec[ ix ];cout << t << ' ';}
}

管家次typename(必须写)表示,elemType(任意名称)在display_message()函数中仍是一个临时放置类型的代称。

模版函数的参数列表通常由两类类型构成,一类是明确的类型,另一类是暂缓决定的类型。

//模版再经重载:
template <typename elemType>
void display_message( const string &msg, const vector<elemType> &vec );template <typename elemType>
void display_message( const string &msg, const list<elemType> &lt );

2.8 函数指针(pointers to functions)带来更大的弹性

必须指明其所指向函数的返回值类型及参数列表。

const vector<int>* (*seq_ptr)( int );

需要重视这个问题!!!!

2.9 设定头文件(header files)

extern 跨文件范围,其他文件也能访问

发现这个写的挺好的:http://www.cnblogs.com/mend/archive/2012/05/02/2479460.html

转载于:https://www.cnblogs.com/Rodge/p/5134828.html

第二章 面向对象的编程风格相关推荐

  1. 第二章 Qt编程核心技术

    QT编程核心技术介绍 第二章 Qt编程核心技术 Qt/X11与Qt/Embedded版本的Qt类库,尽管类的底层实现有一些细微区别,但类的声明及方法函数是一样的,对于编写Qt应用程序的编程者来说,几乎 ...

  2. PHP核心技术与最佳实践 读书笔记 第二章 面向对象的设计原则

    2019独角兽企业重金招聘Python工程师标准>>> 第二章 面向对象的设计原则 2.1 面向对象设计的五大原则 单一职责原则 接口隔离原则 开放-封闭原则 替换原则 依赖倒置原则 ...

  3. c语言从键盘输入千米数,第二章 C语言编程基础.ppt

    第二章 C语言编程基础 习题2 P51-7.8.13.14.16 2.4.8break 语句和continue语句 [例2.19] 输出100 - 200 之间不能被3整除的数. P44 2.4.9循 ...

  4. JAVA基础第二章 面向对象进阶

    2.1封装与getter.setter方法 1.读写是两个操作,读即取值.访问值,写即赋值. 2.面向对象的三大特征:封装.继承.多态 (1)封装--一个程序肯定会定义很多类,那么为了保证各个类之间数 ...

  5. Android人生整理第二章:Java编程第一节-对象导论

    抽象过程:建立解空间(问题建模) 和问题空间 (问题存在) 关联 万物皆为对象 程序是对象的集合,通过发送消息来告知彼此要做的 每个对象都有自己的由其他对象构成的存储 所有对象都有类型 某一特定类型的 ...

  6. 2022-1-14牛客C++项目 —— 第二章 Linux多线程编程(gdb多进程调试)

    复习所用的问题 1.如果有多个进程,如何进行进程调试的切换? 2.当调试一个进程的时候,其他的进程会运行吗?如果会如何让他们不运行? 3.如果中途将挂起的程序修改成不挂起会有什么样的后果?如何解决? ...

  7. [XJTUSE]计算机图形学第二章作业,使用OpenGL编程实现DDA、中点画线和Bresenham算法和中点画圆法

    首先是Windows10 + Visual Studio 2019 搭建OpenGL环境可以查看如下链接: 萌新向!!!Windows10 + Visual Studio 2019 搭建OpenGL环 ...

  8. c语言编程区分负号与减号,C语言程序设计第二章.ppt

    C语言程序设计第二章 C语言编程习惯 (1) 一行只放一条语句. (2) 养成随时给程序加注释的习惯. (3) 程序的书写要有层次感,该缩进的一定要缩进. (4) 编写函数时,变量定义部分和函数的执行 ...

  9. python语言程序设计2019版第二章课后答案-python语言程序设计基础(嵩天)第二章课后习题...

    **第二学期第一周学习总结 一. 本周学习内容总结 一维数组,了解了一维数组的定义(定义一个数组,需要明确数组变量名,数组元素的类型和数组大小,即数组中元素的数量) 一维数组定义的一般形式为:类型名, ...

最新文章

  1. 深度学习博士发出灵魂拷问:我是在做算法还是在调参?
  2. PolyBase 指南
  3. 阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性
  4. python 数据类型 、运算符
  5. 什么是技术,技术是什么
  6. 用FPGA搭建一个STM32内核?
  7. hive metastore mysql_Hive MetaStore的结构
  8. JS任务队列--笔记
  9. b树c语言,B树——思路、及C语言代码的实现
  10. java 与 数据库的连接
  11. 知识蒸馏,中文文本分类,教师模型BERT,学生模型biLSTM
  12. 改写反话技巧_2021考研唐迟阅读技巧总结
  13. [转]innodb的锁时间
  14. C语言求素数的简化算法
  15. Python xlsx转xls xls文件修复
  16. 在Qt环境下进行人机交互界面设计--工具条
  17. 关于opencv的rows和cols的理解
  18. Multipart/form-data文件上传简介
  19. android原生系统手机游戏,ROG真游戏手机系统主页面有三大虚拟按键!安卓原生系统?...
  20. [转] Android Miracast投屏入门

热门文章

  1. 对一个“算法”的分析
  2. Android安全之应用签名验证
  3. python学习笔记-Day08--(面向对象)--补充
  4. puppet3.5源码包安装和配置
  5. SQL大赛——5X5方格棋盘难题
  6. 如何提高你的工作效率?
  7. mysql 中文的数据类型_MySQL 数据类型
  8. php软件开发--redis操作
  9. linux touch 源码,每天一个Linux命令(09)--touch命令
  10. 读取gdb中的图层类型_ArcGIS读取gdb内要素