2016-09-22 95 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