如何将类传递给类是否可以在c ++中?

时间:2016-09-22 00:04:04

标签: c++ class

这可能是通过这种方式或另一种方式将类作为参数传递给另一个类吗?关键是我想要将多个变量(向量,整数,字符串)从一个类一次传递到另一个类,以便可以使用所有变量。有可能吗?

class classA{
 public:
     int a;
     ClassA(){
        int a =11;
        int b =11;
        int c =11;
        int d =11;
      }
     void function(){ 
       a++;
       b++;
       c++;
       d++;
     }
};



 class classB{
 public:
     int x;
     ClassB(class class1){
        int x = 21;
      }
     void function1(){
       x= x+class1.a+class1.b+class1.c+class1.d;
     }
     void function2(){
       x= x+class1.a+class1.b+class1.c+class1.d;
     }
    void function3(){
       x= x+class1.a+class1.b+class1.c+class1.d;
     }
 };

int main{
  ClassA class1;
  ClassB class2;
  class1.function();
  class2.function1(&class1);
  class2.function2(&class1);
  class2.function3(&class1);
  return class2.x;
 }

2 个答案:

答案 0 :(得分:3)

您可以像任何其他变量一样传递类对象,但是,您需要注意如何:

  1. 按值传递:void func(A a);这是标准。对于大对象,这可能意味着显着的开销,对于包含指针的复杂对象,它可能会失败(指针的副本指向相同的数据,而不是指向副本)。为了能够传递变量,需要定义一个复制操作。对于类,这意味着您需要进行复制分配 - 默认或您拥有。如果没有,则不能通过值传递 - 编译器简单不知道如何复制它。
  2. 按引用:void func(A& a);这意味着该函数使用相同的对象作为调用者,而不是副本;任何活动都适用于原始对象。它更快,因为不需要复制,但危险在于该功能可能会对您不了解的对象做一些事情。
  3. 通过指针:void func(A* a);该函数获取指向原始对象的指针。基本上与引用'相同,只是函数内部的访问语法不同。
  4. 你需要了解所有三个选择正确的。

答案 1 :(得分:2)

传递类的实例就像传递任何其他变量一样。你可以通过值传递:

function

这会将c副本传递给function,调用者将无法看到void function1(classA& r); void function2(const classA& r); classA a; function1(a); function2(a); 中对function1所做的任何更改。

您可以通过引用或const引用传递:

r

如果function2修改了void function1(classA* ptr); void function2(const classA* ptr); classA a; function1(&a); function2(&a); ,则调用者会看到它(即此序列中的#include <iostream> struct A { int a_, b_; A() : a_(11), b_(11) {} void function() { a_++; b_++; } }; class B { int i_; public: B() : i_(21) {} void function(const A& a) { i_ += a.a_ + a.b_; } int i() const { return i_; } }; int main() { A a; B b; a.function(); b.function(a); std::cout << b.i(); } 也是如此)。

或者你可以通过指针传递

$list = @("aa") + $list

基于您的代码的完整示例:

if(isset($_POST['field_name']) && !empty($_POST['field_name'])){
//some code here
} else {
//error msg
}

现场演示:http://ideone.com/ksIVRK