我有一个类(A),它包含例如五个变量(参数t,z,y,d和f),我创建了一个类型为(A)的对象(A)。然后我有许多函数(X,U,M)包含在“main.cpp”中,每个函数被定义为只取三个或四个参数已经存在于对象(A)中。例如,函数(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工作。)
答案 0 :(得分:4)
是的,您可以将对象传递给函数。有几种方法可以将类的实例传递给函数:
按值(如果function()
需要修改obj
,但调用者不需要查看更改并且复制费用便宜):
void function(A obj) {}
按引用(如果function()
修改了obj
,并且更改必须对调用者可见):
void function(A& obj) {}
const
参考(如果function()
未修改obj
):
void function(A const& obj) {}
by rvalue reference (c ++ 11):
void function(A&& obj) {}
class A
需要提供对其成员的访问权限。
答案 1 :(得分: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);
}
答案 2 :(得分: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);
}
答案 3 :(得分: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.
}