我是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版本编译此程序。 谢谢!
const B&
作为参数的实现,因此它将调用该实现。 - taocp