0

我有一个类(A),它包含例如五个变量(参数 t、z、y、d 和 f),并且我创建了一个类(A)类型的对象(A)。然后我有许多函数(X,U,M)包含在“main.cpp”中,每个函数被定义为只接受对象(A)中已经存在的三个或四个参数。例如 function(X) 使用变量(仅 t、y 和 z)

我不能像传递参数那样void function(X) (int t, int y, double z){}只传递对象(A)并让每个函数通过从对象(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 回答