2017-05-08 66 views
-1

test.h:在不同類別的相同實例C++

class A 
{ 
public: 
    A(); 
    ~A(); 

}; 

class B 
{ 
public: 
    B(); 
    ~B(); 

}; 

class C 
{ 
public: 
    C(); 
    ~C(); 

}; 

TEST.CPP:

#include "test.h" 

A::A() 
{ 
    C c1; 
} 
A::~A() 
{ 

} 


B::B() 
{ 
    //Here, too, must be "c1" 
} 
B::~B() 
{ 

} 

C::C() 
{ 

} 
C::~C() 
{ 

} 

如何從B類獲得C類的實例?

  1. 我看了一些關於構圖的東西,但不明白它是什麼。
  2. 複製不起作用,因爲C類存儲了不斷變化的某些數據。我需要將它們從A類和B
  3. 改變辛格爾頓也放不下

謝謝!

+0

將它作爲引用或指針? –

+1

你知道類和類的實例之間的區別嗎? –

+0

'A'或'B'(或兩者)應存儲對「C」的引用。例如'B :: B(C&c):c1(c){}' – 0x5453

回答

1

在您的代碼中,沒有任何可以共享的類C的對象;您定義的類C的唯一實例是構造函數A中的局部變量,並且此對象對其他人無法訪問(並且一旦此構造函數完成,該對象將被銷燬)。

一個簡單的方法是定義C類型的一個全局變量和其它翻譯單元(或相同的單元)內使用它:

// c.h 
class C 
{ public: 
    C(int val) : someVal(val) {}; 
    int someVal; 
}; 
extern C c1; // declare c1 

// c.cpp: 
C c1(0); // define c1 once in the program 

// a.cpp 
#include "c.h" // import the declaration of c1 (will not redefine it!) 
A::A() { 
    c1.someVal = 5; 
} 

// b.cpp 
#include "c.h" 
B::B() { 
    c1.someVal = 10; 
}