码迷,mamicode.com
首页 > 编程语言 > 详细

C++知识小节

时间:2015-06-12 14:39:44      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

1. 默认参数
要为某个参数设置默认值,则必须为它右边所有参数提供默认值

int harpo(int n, int m = 0, int j = 5)        /* VALID */
int chico(int n, int m = 6, int j)            /* INVALID */
int groucho(int k = 0, int m = 2, int n = 3)    /* VALID */

 

2. 函数重载
函数的参数列表,也称为函数的特征标。
是特征标,而不是函数返回类型使得可以对函数进行重载。
p.s. 编译器在检查函数特征标时,把类型引用和类型本身视作同一个特征标。
仅当函数基本上执行相同的任务,但使用不同形式的数据时,才应采用函数重载。

 

3. 函数模板:

template <class Any>     /* 也可以写成  template <typename Any>  */
void Swap(Any &a, Any &b) {
    Any temp;
    temp = a; a = b; b = temp;
}

 

程序示例:

#include <iostream>

template <typename Any> void Swap(Any &a, Any &b); /* 声明 */ int main() { using namespace std; int i = 10; int j = 20; Swap(i, j); cout<<"After swap, i = "<<i<<", j = "<<j<<endl; return 0; } template <typename Any> void Swap(Any &a, Any &b) { Any temp; temp = a; a = b; b = temp; }

 

4. 重载的模板:

template <class Any>     /* 也可以写成  template <typename Any>  */
void Swap(Any &a, Any &b) {
    Any temp;
    temp = a; a = b; b = temp;
}

template <class Any>     /* 也可以写成  template <typename Any>  */
void Swap(Any a[], Any b[], int n) {
    Any temp;
    for (int i = 0; i < n; i++) {
        temp = a[i]; a[i] = b[i]; b[i] = temp;
    }
}

 

显示具体化(explicit specialization)
以template<>开头,并通过名称来指出类型
e.g.
struct job {
  char name[20];
  double salary;
  int floor;
};
template<> void Swap<job> (job& a, job &b)
或者可以写成更简单的形式:template<> void Swap(job &a, job &b)

如果有多个原型,编译器在选择原型时,非模板化版本 > 显示具体化 > 模板版本
// non-template function prototype
void Swap(job &, job &)

// template prototype
template<typename Any>
void Swap(Any &, Any &)

// explicit specialization for the job type
template<> void Swap(job &, job &)

显示实例化(explicit instantiation)
template void Swap<int> (int, int) (显示具体化声明在template<> 后)
编译器看到上述声明后,将使用Swap()模板生成一个使用int类型的实例。

 

5. using声明 using std::cout;
using编译命令 using namespace std;

namespace Jill {
    double bucket(double n) {...}
    double fetch;
    struct Hill {...};
}
char fetch;
int main() {
    using namespace Jill;
    Hill Thrill;            /* using Jill::Hill */
    double water = bucket(2);     /* using Jill::bucket */
    double fetch;            /* hide Jill::fetch */    
    cin >> fetch;            /* local fetch */
    cin >> ::fetch;            /* global fetch */
    cin >> Jill::fetch;        /* Jill::fetch */
  
   return 0; }

 

C++知识小节

标签:

原文地址:http://www.cnblogs.com/xiaokuang/p/4571439.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!