2016-09-22 86 views
0

这是可能的这种方式或另一种方式将类传递给另一个类作为参数?关键是我想将许多变量(向量,整数,字符串)从一个类传递到另一个类,以便可以使用所有变量。这有可能吗?如何将类传递给类可以在C++中使用吗?

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; 
} 
+5

您应该熟悉通过值,引用和指针传递参数的概念。 –

+2

我建议读入C++的面向对象编程 –

+2

不要试图通过试错来学习C++,那真的不行。相反,从一本好书中系统地学习它。 –

回答

2

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

void function(classA c); 

classA a; 
function(a); 

这传递一个a复制function,在functionc所做的任何更改将不会被调用者可以看到。

可以通过参考或const引用传递:

void function1(classA& r); 
void function2(const classA& r); 

classA a; 
function1(a); 
function2(a); 

如果function1修改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(); 
} 

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

+0

感谢:)帮助 – MeHow

3

您可以通过一个类的对象像任何其他变量但是,您需要注意如何:

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

你需要了解所有三个选择正确的。

+0

感谢:)帮助 – MeHow

相关问题