2011-10-24 9 views
2

コードベースがの巨大なであるため、どの方法を使用するのか分かりません。クラス名そのものを呼び出す関数ですか?

それは次のようにクラスを定義した:ABC("");を呼び出すために私たちを可能に不足しているコードは

class ABC { 
    member_func(string c); 
}; 

main() { 
    ABC("").member_func("this random string"); 
} 

は何ですか?

どこにでもそのクラスのオブジェクトが見つかりませんでした。

+0

関数またはファンクタが定義されていません。 –

+0

それは関数呼び出しかコンストラクタですか?それはそれらのいずれかである可能性があります。 –

答えて

4

単純にタイプABCのオブジェクトを構築しますが、そのオブジェクトで永続的なメモリ位置を初期化しません。つまり、ABCコンストラクタへの呼び出しが作成する初期化オブジェクトは一時的なものであり、スタックの自動変数、静的メモリなどの呼び出し後にアクセスできるメモリ位置に構築されていないため、呼び出し後に失われます実際には「実世界」で使用可能なような呼び出しを行うための「欠落した」コードは、後でアクセスできるように構築されたオブジェクトの実際の名前です。例えば、ABC my_object("");ABC my_object = ABC("");

UPDATE:あなたが投稿した更新されたコードでは、どのような場所を取っていると、再び一時的に呼び出されているに構築されているタイプABCの一時オブジェクト、その後、member_funcと呼ばれるクラスABCの非静的メソッドでありますそれはABCのコンストラクタへの呼び出しによって作成されたものです。もちろん、このコードが "現実の世界"で何らかの意味を持つためには、member_funcへの呼び出しには、クラスインスタンスの外側に見えるような副作用が含まれている必要があります(つまり、クラスインスタンスにはデータメンバそれは呼び出しが次に変更する共有メモリオブジェクトへのポインタです)。あなたが投稿したコードサンプルからは、呼び出しの副作用がないように見えますが、それはすべての目的と目的ではありません。一時的なABCクラスインスタンスが作成されます。現在の範囲main()からアクセス可能なメモリ位置に構築されていないため、インスタンスへの参照は失われます。

+0

実際の呼び出しはABC( "")ではありません。 butsのABC( "")。member_func(); 私にそれをアップデートしてもらうことをお手伝いしましょう – PnotNP

+0

bjarne stroustroup道路を降りた後、私はC++の微妙で非常に重要な概念の1つが**一時的なもの**であると考えました。 – PnotNP

3
class ABC 
{ 
    std::string d; 
public: 
    ABC(std::string x)   // For the ABC(""). 
    { d = x; } 

    void foo(std::string x) // For the foo(""). 
    { std::cout << d << std::endl << x << std::endl; } 
}; 

int main() 
{ 
    ABC("This creates a temporary object.").foo("This calls foo()."); 

    // Is the same as... 

    { 
     ABC obj("This creates another object."); 
     obj.foo("This calls obj.foo()."); 
    } // obj is destroyed. 

    return(0); 
} 

自己説明的に...私は願っています。 :)

関連する問題