3

私は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++ バージョンでコンパイルしています。

ありがとう!

4

1 に答える 1