21.4.16 C++

 

函数重载

编译时根据传入参数的个数,数据类型等给函数添加修饰符,使其实质上编译成不同的函数。

 

根据传入的数据类型确定调用函数,

C++中NULL匹配长整型

viod print(long)
   
main(){
   print(NULL)
}

可以输出。

 

 

函数模板

实现泛型编程(Generic Programming)

声明一个模板函数

template<class T>
   T add(T a,T b){return a+b;}
template<typename T>
T add(T a,T b){return a+b;}

T是占位符,可用int,double 等代替。

 

模板函数的调用

实例化(特化)

声明后任需要实现

int a,b;
<输入a,b>
double c,d;
<输入c,d>
   
   cout << a << "+" << b << "=" << add<int>(a+b) << endl;
   cout << c << "+" << d << "=" << add<>(c+d) << endl; //<>可去

编译后add为两个不同的函数(用函数重载实现)

当输入的数据类型不同时,需要添加<>进行类型转换,否则编译报错,如

cout << a << "+" << c << "=" << add<>(a,c) << endl;

但是

cout << a << "+" << c << "=" << add<double> << endl;

可以正常编译运行,且最后返回值类型为double。

 

 

作用域和链接性

用mutable修饰结构体中的元素,即使整个结构体被声明成const型,该元素也可修改。

struct Student {
   char m_cGender[2];
   mutable int m_age;
}
const Student zhangsan;

可以对m_age进行修改,而对m_cGender修改则会编译报错。

 

 

多文件的编译

用终端编译时,对所有涉及调用函数的文件都需要编译。(集成开发环境不需要)

当多个文件中有完全相同的两个函数时,编译会报错。

 

 

名空间

格式

namespace 自定义名空间名{
  ...
}

嵌套名空间

namespace outer{        //外层空间
   namespace inner{ //内层空间
  ...
  }
}

 

名空间名字解析

作用域限定符

::

全限定名

NS::成员名

using声明

using NS

 

posted @ 2021-04-17 20:29  临卓  阅读(51)  评论(0编辑  收藏  举报