2017-05-08 5 views
-1

test.h:Die gleiche Instanz in verschiedenen Klassen 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() 
{ 

} 

Wie kann ich von Klasse B auf eine Instanz der Klasse C zugreifen?

  1. Ich las etwas über die Zusammensetzung, aber nicht verstanden, was es ist.
  2. Das Kopieren funktioniert nicht, da Klasse C bestimmte Daten speichert, die sich ständig ändern. Ich brauche sie aus der Klasse A und B auch passt nicht
  3. Singleton ändern

Dank!

+0

Pass es als Referenz oder Zeiger:

wäre eine einfache Art und Weise eine globale Variable vom Typ C und es verwendet, in anderen Übersetzungseinheiten (oder die gleichen Einheit) zu definieren sein? –

+1

Kennen Sie den Unterschied zwischen Klasse und Instanz der Klasse? –

+0

'A' oder' B' (oder beide) sollten einen Verweis auf 'C' speichern. z.B. 'B :: B (C & c): c1 (c) {}' – 0x5453

Antwort

1

In Ihrem Code gibt es kein Objekt der Klasse C, das freigegeben werden könnte; Die einzige Instanz der Klasse C, die Sie definieren, ist eine lokale Variable innerhalb des Konstruktors A, und dieses Objekt ist für andere nicht zugänglich (und wird zerstört, sobald dieser Konstruktor fertig ist).

// 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; 
} 
Verwandte Themen