0

たとえば、5つの変数(パラメーターt、z、y、d、およびf)を含むclass(A)があり、タイプclass(A)のobject(A)を作成しました。次に、「main.cpp」に含まれる多くの関数(X、U、M)があります。各関数は、object(A)にすでに存在する3つまたは4つのパラメーターのみを受け取るように定義されています。たとえば、function(X)は変数(t、y、zのみ)を使用します

パラメータを渡す代わりにvoid function(X) (int t, int y, double z){}、object(A)のみを渡し、各関数に次のようにobject(A)のパラメータから必要なものを探すだけでパラメータを選択させます(これが存在する場合)?

    void function(X) (A()){}

以下の使用は避けたいと思います。

    void function(X) (A.t, A.y, A.z){}

(私はc ++を初めて使用し、Qt Creatorで作業していることに注意してください。)

4

4 に答える 4

4

はい、オブジェクトを関数に渡すことができます。クラスのインスタンスを関数に渡す方法はいくつかあります。

  • 値によるfunction()変更する必要objがあるが、呼び出し元が変更を確認する必要がなく、コピーが安価である場合):

    void function(A obj) {}
    
  • 参照によるfunction()変更objおよび変更が呼び出し元に表示される必要がある場合):

    void function(A& obj) {}
    
  • const参照によるfunction()変更しない場合obj):

    void function(A const& obj) {}
    
  • 右辺値参照(c ++ 11)による:

    void function(A&& obj) {}
    

メンバーへのclass Aアクセスを提供する必要があります。

于 2013-03-05T11:23:12.980 に答える
1

簡単

class A
{
public:
    double z;
};

void func(const A &obj)
{
    // Do something with obj.z
    std::cout << obj.z << std::endl;
}

int main()
{
    A myObj;

    myObj.z = 100;

    func(myObj);
}
于 2013-03-05T11:21:56.400 に答える
0

メンバーフィールドがあれば、publicどの関数からでもアクセスできます。そうでないpublic場合は、値を取得するためにクラスにメンバー関数を追加する必要があります。いわゆる「getter」関数です。

#include <iostream>

class C
{
public:
    int getI() const { return i_; }
    void setI(const int i) { i_ = i; }

private:
    int i_;
}

void someFunction(C c)
{
    std::cout << "The member i_ in c is " << c.getI() << '\n';
}

int main()
{
    C c;
    c.setI(123);

    someFunction(c);
}
于 2013-03-05T11:21:05.617 に答える
0

Joachimの説明は、オブジェクトがコピーされないようにするために、オブジェクトをポインターまたは参照として渡す必要があることを除いて、必要なものです。

void someFunction(C& c)
    // Accept a reference to a 'C' object
{
    // Joachim's code
    // This method doesn't change the main from Joachim's
    // answer.
}

void someFunction(C* c)
    // Accept a pointer to a 'C' object
{
    std::cout << "The member i_ is " << c->getI() << std::endl;
    // Note the use of '->', not '.' to access the object's method.
}

void main()
{
     C c;
     c.setI(1);

     someFunction(&c);
     // The '&' means 'address of' in this context. I.E. you're passing a pointer.
}
于 2013-03-05T11:28:34.783 に答える