0x01 符号重载
符号符号重载是一种强大的机制, 它允许修改一个操作符的含义, 当看到加号时, 有时候代表加法运算, 有时代表将字符串连接起来其他的含义。 所以和具体的语义与使用场合有很大的关系。 如:
Matrix a,b,c;
c = a+b;
这里的加号表示矩阵的加法, 而不是整数或者浮点数的加法。
0x02 模板
遇到类似这样的问题, 比如: 比较两个数的大小, 其函数原型为 :
int max(int a, int b);
如果还要比较两个双精度的大小, 还得再写一个新的函数。 比如:
int max(double a, double b);
如果又需要写比较两个字符串的大小呢? 那么需要写第三个函数。 也许, 我们会想到使用 typedef 。 比如:
typedef int item;
item max(item a, item b)
{
if(a > b)
return a;
else
return b;
}
如果需要使用多个不用版本的 max 函数, 则使用 typedef 无法满足要求, 因为程序只能为 item 定义一种数据类型。
解决以上问题的一种灵活的机制是使用模板函数, 在函数实现的任何地方, item 都不会受到受限于任何特定的类型。 当使用模板函数时, 编译器在检查参数的类型时, 自动确定 item 的数据类型。 比如:
template <class Item>
item max(item a, item b)
{
if(a > b)
return a;
else
return b;
}
表达式 template 称为模板前缀, Item 称为模板参数。 模板前缀总是在模板函数定义的前面, 它提醒编译器: 下面的定义将使用名为 Item 的未确定的数据类型。 事实上, 模板前缀表明 – Item 是一种将来要填充的数据类型, 现在不用担心它, 只在函数内部使用。
C 语言既有它的优势也有它的不足之处, 而使用 C++ 具有更大的威力。 事实上, 嵌入式系统软件的开发不仅可以用 C 语言, 同样可以使用 C++ 。 例如单片机在 keil 下也是可以使用 C++ 进行开发。