转载地址
http://blog.csdn.net/candcplusplus/article/details/12746975
阅读原文并实践
函数重载,不同的符号表
function_re.cpp
#include <cstdio>
#include <iostream>
using namespace std;
void func(){}
void func(int a){}
int func(int a,int b){ return 0; }
double func(double a, double b){ return 0.0; }
void func(float a, float b){}
编译成目标文件
$g++ -c function_re.cpp
objdump 查看符号表
$objdump -t function_re.cpp
- 函数名 + 参数列表 决定了函数的符号表 (与函数返回值没有什么关系)
不将函数返回类型考虑到函数重载中——这是为了保持解析操作符或函数调用时,独立于上下文(不依赖于上下文)
const参数 对函数重载的影响
void func(int a){}
void func(const int a){}
编译出现重定义错误,说明上诉两个函数的符号是一样的
void func(int &a){}
void func(const int &a){}
可以编译通过,注意对比上面的程序,参数中加了个引用
- 实际上仅当形参是引用或指针时,const形参才对符号名有影响。
在类中, 两个成员函数只是常量性不同,可以被重载
const作用域成员函数的目的,是为了确保该成员函数可作用于const对象身上。
const对象,指向const对象的指针或引用只能调用const成员函数。
(若不存在const成员函数,那么const对象的操作极为困难,无法调用任何成员函数)
非const对象可以调用非const成员函数和const成员函数。
class A{
public:
int a, b;
A(int _a = 0, int _b = 0)
{
a = _a;
b = _b;
}
public:
int fun(int a);
int fun(int a) const;
};
推荐文章:C++ 函数重载
吴秦
http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html