私はC ++を初めて使用し、学習しています。クラスの関数オーバーロードについて質問があります。
関数名を除いて、以下に2つのまったく同じコードがあります。1 つは単なる関数で、もう 1 つは演算子です。
#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
これら 2 つのプログラムの唯一の違いは、関数名: test と operator= です。C++ がこのように動作する理由がわかりません。足りないものはありますか?
私はこのプログラムを Mac OS X 8.2 の下で 4.2.1 の g++ バージョンでコンパイルしています。
ありがとう!