JustAnswer のしくみ:
  • 専門家に質問
    知識豊富な専門家があらゆる質問にお答えするために常に待機しています。
  • 専門家が丁寧に対応
    E メールやサイト内オンラインメッセージなど、さまざまな手段で回答を通知。必要に応じてフォローアップの質問をすることもできます。
  • 満足度 100% 保証
    専門家からの回答を確認し評価をすることで、支払うかどうかを決めます。
rushqkに今すぐ質問する
rushqk
rushqk, プログラマー
カテゴリ: プログラミング
満足したユーザー: 766
経験:  AV機器開発、ソフトウェア設計
60440014
ここに プログラミング に関する質問を入力してください。
rushqkがオンラインで質問受付中

C++

質問者の質問

C++のプログラムについて質問です。ちなみにvisualC2010をインストールしたのですが、何かが悪いらしくどうしても自分でビルトすることができませんでした。。以下のように出力されて進めません。。。 1>cl : コマンド ライン error D8045: C ファイル '..\..\..\..\..\Desktop\Int.C' を /clr オプションと共にコンパイルできません ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


 


質問は、以下のC++プログラムの出力結果は何になりますか。


#include <iostream>
using namespace std;


class Int
{
public:
    Int(int value) {this->value = value;}
    Int& operator+=(const Int& anInt)
        {value += anInt.value; return *this;}
     void doubleIt() {value *= 2;}
     friend ostream& operator<<(ostream& out, const Int& anInt)
         {return out << anInt.value;}
private:
     int value;
};


int main()
{
    Int i(5), j(6);


    (i += j).doubleIt();
    cout << i << endl;
    return 0;
}


 また、上記プログラムでは+=オペレータはリファレンスを帰していますが、値(value)を返すようにした場合にはこのプログラムの出力は何になるでしょうか。またリファレンスと値(value)とでは動作にどのような違いがありますか?なぜこのようなオペレータはリファレンスで帰す必要があるのでしょうか。ご回答よろしくお願いします。

投稿: 6 年 前.
カテゴリ: プログラミング
専門家:  rushqk 返答済み 6 年 前.

VCのプロジェクト生成設定がおかしいのではないでしょうか。

Win32のコンソールアプリにすればビルドはできると思いますよ。

 

答えは22と11です。

リファレンスと値だとリファレンスだと実際に値を書き換えて編集できるのに対して、

値で実行するとその処理内部でしか変更できないのです。

 

例えば、以下の処理をみてください。

void foo(int a){

a += 1;

}

 

void main ()

int hoge = 10;

foo(hoge);

}

 

fooという関数は引数hogeをうけて、foo内部では10+1にするのですが

関数が終わってもどってもhogeは何も変更されません。

ここで、foo(int &a)として、呼び出しをfoo(*hoge)とすると、処理が戻ってきた時に

hogeは11になっているのです。

 

ここは外部から回答結果が検索できるので気をつけてくださいね。

原文を読んで聞きたい事の意味が分かりました。

rushqkをはじめその他名のプログラミングカテゴリの専門家が質問受付中