-C++函数部分
字符函数库cctype
写入文本
1.包含头文件fstream
2.创建一个ofstream对象
3.将该ofstream对象同一个文件关联起来
4.如使用cout一般使用该对象
1234567891011121314 //范例程序//在目录下创建名为Hello world.txt的文件//写入内容using namespace std;int main(){ofstream outFile;outFile.open("Hello world.txt");cout<<"Hello world";outFile<<"Hello world";outFile.close();return 0;}
这只是简单的输出文本。如果原本的输出文本已有内容,这种输出方式会将文本内容清空后重新写入。
读取文本
1.包含fstream头文件
2.创建一个ifstream对象
3.将该对象和文件关联起来
4.结合ifstream对象和运算符>>读取各种数据
123456789101112131415 //范例程序using namespace std;int main(){ifstream inFile;inFile.open("Hello world.txt");while(inFile.good()){char ch;inFile>>ch;cout<<ch;}inFile.close();return 0;}
默认参数
默认参数指的是当函数调用中省略了实参时自动使用的一个值。它提供了一种便捷的方式。在设计类时,通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。
函数重载
默认参数可以使用不同数目的参数调用同一个函数。
而相对的,函数重载(函数多态)可以使用多个同名的函数。
函数重载的关键是函数的参数列表—也称为函数特征标。C++允许定义名称相同的函数,条件是它们的特征标不同。
如果调用的函数没有原型匹配。C++将尝试使用标准类型转换强制进行匹配。但如果有多个原型,则会拒绝这种调用,并将其视为错误。
|
|
函数模板
函数模板是通用的函数描述,也就是说,它们使用泛型来定义函数,其中的泛型可以用具体的类型(int 和double)替换。
第一行指出,要建立一个模板,并将类型命名为AnyType。关键字template和typename是必须的,但是class可以用来替换typename。
函数模板的意义在于,当你调用该函数,如该交换函数而言,如果你给的参数是int或者double,AnyType就会替换成所给的参数的类型。
还有一点要注意的是,与C中相同,函数模板中也不需要所有的参数类型都需要用泛型.
显式具体化
显式具体化是对于模板而言的,即对于函数模板而言,有些类型的操作无法实现,需要specialize。简单的理解就是,写定一个函数模板后,通过显式具体化来拓宽模板的应用范围。
具体化优先于常规模板
而非模板函数优先于具体化和常规模板
|
|
swap
显式实例化*
显式实例化将使用swap()模板生成一个使用int类型的实例。
Explicit instantiation lets you create an instantiation of a templated class or function without actually using it in your code. Because this is useful when you are creating library (.lib) files that use templates for distribution, uninstantiated template definitions are not put into object (.obj) files.
(For instance, libstdc++ contains the explicit instantiation of std::basic_string
关键字decltype
在C++98中,编写模板函数时,并不是总能呢个知道应在声明中使用哪种类型
C++中新增关键字decltype提供了解决方案