我是新手,正在学习 C++。我有一个关于类的函数重载的问题。
除了函数名外,我在下面有两个完全相同的代码。一个只是一个函数,另一个是运算符。
#include <iostream>
using std::cout;
using std::endl;
class B;
class A {
public:
void test(A const &a) { cout << "AA" << endl; }
void test(B const &b) { cout << "AB" << endl; }
};
class B : public A {
public:
void test(A const &a) { cout << "BA" << endl; }
};
int main() {
B b1;
B b2;
b1.test(b2);
return 0;
}
该程序打印
BA
这是另一个程序。
#include <iostream>
using std::cout;
using std::endl;
class B;
class A {
public:
void operator=(A const &a) { cout << "AA" << endl; }
void operator=(B const &b) { cout << "AB" << endl; }
};
class B : public A {
public:
void operator=(A const &a) { cout << "BA" << endl; }
};
int main() {
B b1;
B b2;
b1.operator=(b2);
return 0;
}
该程序打印
AA
这两个程序之间的唯一区别是函数名:test 和 operator=。我不明白为什么 C++ 会这样。有什么我想念的吗?
我在 mac OS X 8.2 下用 g++ 版本的 4.2.1 编译这个程序
谢谢!