C++ 函数和类

函数

1.内联函数

inline int Max(...){};

作用:减少函数调用的开销,在编译时将语句替换为函数体,适用于执行时间短且调用此时多的函数。

2.函数重载

函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表(个数,类型,排列顺序)的函数,这组函数被称为重载函数。

  • 函数的返回类型可以相同也可以不相同。 但仅仅返回类型不同不足以成为函数的重载。

  • 减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。

  • 函数重载是一种静态多态

  • 最准确的重命名映射机制为:作用域+返回类型+函数名+参数列表。

  • 与C语言的区别:在C语言中,编译器在编译.c文件时,只会给函数进行简单的重命名;具体的方法是给函数名之前加上"_"。所以加入两个函数名相同的函数在编译之后的函数名也照样相同,调用者会因为不知道到底调用那个而出错,故C语言中没有函数重载

3.缺省函数

调用函数时可以省略右边部分的参数值,此时默认使用定义的缺省值(默认值),利于函数功能扩展。

int fun(int x1, int x2 = 3, int x3 = 5){};

fun(3);        //合法,相当于fun(3,3,5)
fun(3,5);      //合法,相当于fun(3,5,5)
fun(3, ,8);    //非法,只能省略右边参数

1.结构化程序设计(C语言)

程序 = 数据结构 + 算法

2.面向对象程序

程序 = 对象 + 对象 + 对象……

3.类

如何定义:

(1)成员变量(特点)

(2)成员函数(行为或功能),该过程称为“抽象”

  • 成员函数定义可以写在类的外部(在内部仅声明)
void A::area(){
	...
}
  • 值得注意的是,在外部定义函数时,要在前面加上"A::",说明该函数是A的成员函数,该函数一定要通过对象或对象的指针进行调用

  • 成员函数可以重载或带缺省参数

(3)封装

(4)访问范围关键字:说明类成员可被访问的范围

  • private: 私有成员,只能在成员函数内访问(默认)
  • public: 公有成员,可在任何地方被访问
  • protected: 保护成员

(5)在类的成员函数内部,可访问:

  • 当前对象的全部属性、函数;
  • 同类其他对象的全部属性、函数;

比如

void A::getMax(A a1, A a2){
	cout<<max(a1.val, a2.val);	//访问同类A的其他对象a1,a2
}

(6)“隐藏”机制 即设置private私有成员的机制,目的是强制对成员变量的访问一定要通过(公有)成员函数来进行。则如果成员变量类型改变,只需更改成员函数即可。

4.对象的存储方式

每个对象的存储空间等于成员变量存储空间之和。 (成员函数只存储一份,被所有同类型对象所共享)

5.使用方式

对象名.成员名;指针->成员名;引用名.成员名

Test obj;
Test *p;
Test &obj2 = obj;
obj.x1 = 5;
p->x1 = 5;
obj2.x1 =  5;
//上三条语句等价

https://www.bilibili.com/video/BV1Ns411n7ui?p=5
程序设计与算法(三)C++面向对象程序设计