2012-03-30 10 views
0

パラメータとして渡す必要がある、定義済みの関数を持つクラスがあります。 このクラスの新しいインスタンス(パラメータ付き)をオブジェクト(?)として設定します。C++クラス/オブジェクト関数の使用クエリ

構文に慣れるには。そのタイプの

class classname{ 
void classfunction1(int, int); 
void classfunction2(int, int); 
}; 

void classname::classfunction1 (int a, int b) 
{ // function } 

void classname::classfunction2 (int a, int b) 
{ // function uses classfunction1 } 

私はclassfunction 2で使用される、classfunction1のためのparamsを定義し、オブジェクトを割り当てる(?)、インテリセンスはそれを拾うようにします。

疑似:

int main(){ 
classname(20, 20) object; 
object.classfunction2(50, 50); 
} 

ありがとう!

+0

私はそれがあなたが達成しようとしていることを理解するのに苦労しています、あなたの疑似コードは実際には意味がありません、申し訳ありません。あなたはコンストラクタを書く方法を探していますか? – Mat

答えて

2

あなたのメインは少し分厚いです。

int main(){ 
    classname(20, 20) object; // You are incorrectly calling a constructor which does not exist 
    object.classfunction2(50, 50); // more like correct behavior. 
} 

あなたが定義したクラスは、すべてのメンバ変数を持っていないので、それはないstore任意のデータを行います。これには2つの機能しかありません。したがって、これは、コンパイラがすべてのクラスに対して定義する "デフォルトのコンストラクタ"を使用できることを意味します(必要に応じて独自に提供できます)。

int main(){ 
    classname object; // Call the default constructor 
    object.classfunction1(10, 20); // Call the functions you want. 
    object.classfunction2(50, 50); 
} 

あなたが何かやるべきコンストラクタを提供したい場合:

int main(){ 
    classname object(10, 20); // Call the default constructor. Note that the (10, 20) is AFTER "object". 
    object.classfunction1(); // Call the function... it will use 10 and 20. 
    object.classfunction2(50, 50); //This function will use 50, 50 and then call classfunction1 which will use 10 and 20. 
} 

注意すべき物事のカップル:道

class classname{ 
    public: 
    classname(int variable1, int variable2): 
      member1(variable1), member2(variable2){}; //note that there is no return type 
    void classfunction1(); //because instead of taking parameters it uses member1 & 2 
    void classfunction2(int, int); 

    private: 
    int member1; 
    int member2; 
}; 

をメインあなたはその後、次のようになります最初のコンストラクターを呼び出そうとしましたが、変数名の後にパラメーターが必要です。 下記のコメントを見て、もう一度注意してください。

+1

'classname(20、20)object;'はコンストラクタを呼び出さず、実際には何も意味しません(違法です)。 'classname object();'はコンストラクタを呼び出さず、 'object'という名前の関数の宣言であり、パラメータを持たず、' classname'型のオブジェクトを返します。 –

+0

@LucTouraille - はい、誤った位置のparamリストについてです。私は後で修正を指摘した。 – Dennis

+0

@LucTouraille他のことについて...偶発的な関数のポインタ宣言は、あなたは絶対に正しいです。私はこれまで気付かなかった。私の答えを変更します。 私はこの質問から何か新しいことを学ぶとは思わなかった...しかし、そこに行く! – Dennis

関連する問題