C++ Primer Plus学习笔记之四
第八章函数探幽,总计分为以下几块--
内联函数:除了不能递归和普通函数用法类似,时间会减少,但占用内存会增多
引用参数:挺重要,防止陷入函数只修改了局部变量的尴尬情况
默认参数:定义函数时赋予初值,之后可以使用函数时可以省略赋予初值的部分
函数重载:本质上就是多个函数名一样但是变量或者返回值类型不一样的函数
函数模板:用模板来突破不同类型数据之间的壁垒,方便编程
代码下载地址:http://download.csdn.net/detail/zmdsjtu/9620391
附上具体代码:
#include<iostream>
#include<string>
using namespace std;
////////////////2016-9-2__C++ Primer Plus 第八章/////////////////
//-----------------------函数探幽----------------------------
inline double 内联函数(double x) { return x*x; };//用法似乎和普通函数没啥区别,但是时间会少一些,相对应内存占用多一点
//内联函数不能递归
void 引用作为函数参数(); double cube(double a); double refcube(double &ra);//还是很重要的!!!!!
//当定义一个函数 const 类型 & 函数( 类型 & 变量)时注意返回值不能是局部变量!避免指向局部变量的引用!Page233
void 默认参数(); string left(const string str, int n = 1);//定义的时候遵循设置默认参数左右分层(左边没设置,右边都设置了)
void 函数重载(); string add(string sr, int a); string add(string sr1, string sr2); string add(int a, string sr);//本质上就是定义两个函数,只是名字一样罢了
void 函数模板(); template<class Any> void Swap(Any &a, Any &b);//这里写下swap函数可以对照着引用参数看
//函数模板可以让注入int, double之类的只要写一次就好
//-------模板的重载就是结合一下,大家意会一下就好。。。
//------模板的实例化和具体化请督促我写一篇不是纯代码的博文-----------
int main() {
//cout << "5.1的平方为" << 内联函数(5.1) << endl;
//引用作为函数参数();
//默认参数();
//函数重载();
函数模板();
system("pause");
}
void 引用作为函数参数() {
//很多时候如果不加上&相当于对main函数里的变量并没有影响,只是处理了局部变量
//一个更为直观的例子是写swap(a,b)以及swap(&a,&b)发现前者不能换变量
double x = 3.0;
cout << "普通cube返回值:" << cube(x) << " x=";
cout<< x << endl;
cout << "引用cube返回值:" << refcube(x) << " x=";
cout<< x << endl;//注意,这里必须分两行,不然还是读的一开始的3...废了一万个脑细胞
}
double cube(double a) { a *= a*a; return a; }
double refcube(double &ra) { ra *= ra*ra; return ra; }
void 默认参数() {
string 输入;
cout << "随便打点英文吧:" << endl;
cin >> 输入;
string 输出;
输出 = left(输入,3);
cout << 输出 << endl;
cout << "默认截取第一位:";
输出 = left(输入);
cout << 输出<<endl;
}
string left(const string str, int n ) {
string p;
p = str.substr(0, n);
return p;
}
void 函数重载() {
string a = "我今天吃了";
int b = 100;
string c = "颗瓜子";
cout << add(add(a, b), c)<<endl;
}
string add(string sr, int a) { string total; char buf[10]; sprintf_s(buf, "%d", a); string b = buf; total = sr + b; return total; }
string add(string sr1, string sr2) { string total = sr1 + sr2; return total; }
string add(int a, string sr) { string total; char buf[10]; sprintf_s(buf, "%d", a); string b = buf; total = b + sr; return total; }
void 函数模板() {
int a = 10, b = 20;
Swap(a, b);
cout << "Swap之前a=10,b=20。之后a=" << a << ",b=" << b<<endl;
string 你 = "帅", 我 = "丑";
Swap(你, 我);
cout << "Swap之前你=帅,我=丑。之后你=" << 你 << ",我=" << 我 << endl;
}
template<class Any> void Swap(Any &a, Any &b) {Any temp; temp = a; a = b; b = temp;}
最后祝大家编程愉快:)