Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何仅将变量(从类类型的对象)作为对象传递给函数(在main.cpp中)_C++ - Fatal编程技术网

C++ 如何仅将变量(从类类型的对象)作为对象传递给函数(在main.cpp中)

C++ 如何仅将变量(从类类型的对象)作为对象传递给函数(在main.cpp中),c++,C++,我有一个类(a),它包含五个变量(参数t、z、y、d和f),我创建了一个类(a)类型的对象(a)。然后我有很多函数(X,U,M)包含在“main.cpp”中,每个函数被定义为只接受对象(A)中已经存在的三个或四个参数。例如,函数(X)使用变量(仅t、y和z) 我是否可以只传递对象(A),让每个函数只通过从对象(A)的参数中查找它需要的参数来选择它的参数,如下所示(如果存在),而不是以void function(X)(int t,int y,double z){}的形式传递参数 我希望避免使用以下

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

我是否可以只传递对象(A),让每个函数只通过从对象(A)的参数中查找它需要的参数来选择它的参数,如下所示(如果存在),而不是以
void function(X)(int t,int y,double z){}
的形式传递参数

我希望避免使用以下内容

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

(请注意我是C++的新手,我在QT创建者中工作)

如果成员字段是代码>公共< /C> >,您可以从任何函数访问它们。如果类不是公共的,则必须向类中添加成员函数以获取值,即所谓的“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);
}
#包括
C类
{
公众:
int getI()常量{return i_;}
void setI(const int i){i_u=i;}
私人:
国际组织;
}
空函数(C)
{

std::cout如果成员字段是
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);
}
#包括
C类
{
公众:
int getI()常量{return i_;}
void setI(const int i){i_u=i;}
私人:
国际组织;
}
空函数(C)
{
std::coutEasy

A类
{
公众:
双z;
};
无效函数(常量A和对象)
{
//用obj.z做点什么
std::coutEasy

A类
{
公众:
双z;
};
无效函数(常量A和对象)
{
//用obj.z做点什么

std::cout是的,可以将对象传递给函数。有几种方法可以将类的实例传递给函数:

  • by value(如果
    function()
    需要修改
    obj
    ,但调用方不需要查看更改,而且复制成本低廉):

  • 通过引用(如果
    function()
    修改了
    obj
    ,并且调用者必须能够看到更改):

  • 通过
    const
    reference
    (如果
    function()
    未修改
    obj
    ):

  • 通过右值引用(c++11):


类A
需要提供对其成员的访问。

是的,您可以将对象传递给函数。有几种方法可以将类的实例传递给函数:

  • by value(如果
    function()
    需要修改
    obj
    ,但调用方不需要查看更改,而且复制成本低廉):

  • 通过引用(如果
    function()
    修改了
    obj
    ,并且调用者必须能够看到更改):

  • 通过
    const
    reference
    (如果
    function()
    未修改
    obj
    ):

  • 通过右值引用(c++11):


类A将需要提供对其成员的访问。

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.
}
void函数(C&C)
//接受对“C”对象的引用
{
//约阿希姆密码
//此方法不会改变Joachim的主方法
//回答。
}
空函数(C*C)
//接受指向“C”对象的指针
{

std::coutJoachim的解释就是您所需要的,只是对象应该作为指针或引用传递,以确保它不会被复制

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.
}
void函数(C&C)
//接受对“C”对象的引用
{
//约阿希姆密码
//此方法不会改变Joachim的主方法
//回答。
}
空函数(C*C)
//接受指向“C”对象的指针
{

std::cout如果t,y和z是公共的,这很容易:在函数中声明int t=A.t等;或者使用与使用t相同的方法使用A.t。如果t,y和z是私有的,你需要创建访问。如果t,y和z是公共的,这很容易:在函数中声明int t=A.t等;或者使用与使用t相同的方法使用A.t。如果t,y和z是私有的,你可以需要创建附件。
void function(A& obj) {}
void function(A const& obj) {}
void function(A&& obj) {}
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.
}