C++学习笔记(四)--内联函数,引用参数,默认参数,函数重载,函数模板



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 Anyvoid 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;

= 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 Anyvoid Swap(Any &a, Any &b) {Any temp; temp = a; a = b; b = temp;}

 



最后祝大家编程愉快:)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱铭德

五毛也是爱٩(●´৺`●)૭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值