[C++】C++オーバーロード opeartor=非静的メンバ関数でなければならない?
2022-02-11 10:07:52
コード
#include
using namespace std;
class C {
public:
int x;
C () {}
C(int a) : x(a) {}
// member function
C operator = (const C&);
};
C C::operator= (const C& param) {
x = param.x;
return *this;
}
int main()
{
C foo(1);
cout <<"foo.x = " << foo.x << endl;
C bar;
bar = foo;
cout <<"bar.x = " << bar.x << endl;
return 0;
}
実行
foo.x = 1
bar.x = 1
エラー
opeartor= must be a nonstatic member function
ノート
引用
<ブロッククオート
いくつかの演算子は、メンバ関数または非メンバ関数として、2つの形式でオーバーロードされる可能性があることに注意してください。
多くの演算子は
メンバー関数
と
非メンバー関数
どちらのフォームも、オーバーロードされた
説明
- いわゆる メンバー関数 は コード セクションでは、オーバーロードされる演算子についてクラス定義で簡単な宣言があります。
C operator = (const C&);
ここでは、演算子=(等号)がオーバーロードされています。
- とは対照的に 非メンバー機能 は、そのような記述がないクラス定義で、例えば、あるクラスの完全な定義は、以下のものだけで構成されています。
class D {
public:
int y;
D () {}
D (int b) : y(b) {}
};
-
- C++には、次のような多くの演算子があります。 = (等号) としてのみ使用することができます。 メンバー関数 としてのみオーバーロードすることができます。 コード があります。
-
- また、以下のような演算子もあります。 +(プラス)記号 として使用することができます。 メンバー関数 として、また 非メンバー関数 がオーバーロードされている。
ダウトフル
私の読みでは トーチュラル [1]クラス(II)/キーワードこの項には、次のようなサンプルコードがあります。
CVector& CVector::operator= (const CVector& param)
{
x=param.x;
y=param.y;
return *this;
}
と書かれていることに注意してください。
CVector&
これは、このコードを参照して書かれています。
Class C
であれば
= (等号)
と書くと、次のようになります。
C&
しかし、その場合、コンパイラ(DEV C++ ISO C++11)は、次のように報告します。
エラー
に修正し、最終的に
コード
の部分はコンパイルを通過するため、現在あなたのコードはサンプルコードと矛盾しているところです。
参照
<ブロッククオート関連
-
Linux の 'pthread_create' への未定義参照問題を解決しました。
-
解決策:エラー:'cout'は型名ではありません。
-
戦闘機ゲームのC++実装(ソースコード)
-
34:5: エラー: 制御が非ボイド関数の終わりに達する可能性がある [-Werror,-Wreturn-type] エラー解析
-
const char*' から 'char*' への変換が無効です。
-
警告を表示します。ISO C++は文字列定数を'char*'に変換することを禁じています[-Write-strings]。
-
[C++] 不完全な型へのメンバーアクセスエラー
-
C++11 ランダムライブラリ乱数
-
ベクトル添え字が範囲外のコンテナの使用、その他類似のエラー
-
デバッグエラー Assertion Failed 問題について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
C++11での移動セマンティクス(std::move)と完全な前進(std::forward)。
-
undefinederror: 'dynamic_cast' の前に unqualified-id を指定する必要があります。
-
C++ JSON ライブラリ jsoncpp 新 API の使用法 (CharReaderBuilder / StreamWriterBuilder)
-
C++-サンプリング関数 GridSampling (要サンプリング高速化)
-
C++プリントベクター
-
エラー: "***"の前にイニシャライザーがあります。
-
sort(...)」への呼び出しに対応する関数がない、エラー
-
C++ ダイナミックオープンスペース
-
C++テンプレートテンプレート使用法まとめ
-
"name.bat "は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。