2009-05-16 18 views

Odpowiedz

19

Tak, jest to możliwe. Dodaje tylko deklaruje wsx

class wsx; 

Tego rodzaju deklaracja nazywa się naprzód deklaracji, ponieważ jest to potrzebne, gdy dwie klasy odnoszą się do siebie nawzajem:

class A; 
class B { A * a; }; 

class A { B * b; }; 

Jeden z nich należy do przodu oświadczył wtedy.

+1

Uwaga dodatkowa: jest potrzebna nie tylko w 2 klasach wzajemnie. Na przykład można stosować deklaracje forward zamiast nagłówków, aby zminimalizować zależności. – SomeWittyUsername

0

Nie jestem pewien, co masz na myśli. Wklejony kod wygląda poprawnie.

+0

Użyłem kodu jako przykładu tego, co myślałem, że będzie wyglądać; Pytałem, czy to możliwe. –

+0

Cóż, jest to możliwe, a ty to zrobiłeś, ale nie jestem pewien, czy powiedziałeś, co masz zamiar powiedzieć, i zrobiłeś to, co chciałeś zrobić :) – bdonlan

0

Zdefiniowałeś klasę. Nie ma członków danych, ale nie jest to konieczne.

3

W przykładzie

class wsx; // this is a class declaration 

class wsx // this is a class definition 
{ 
public: 
wsx(); 
} 

Więc tak, za pomocą class wsx; możliwe jest zadeklarować klasę bez definiowania go. Deklaracja klasy pozwala zadeklarować wskaźniki i odniesienia do tej klasy, ale nie do wystąpień klasy. Kompilator potrzebuje definicji klasy, aby wiedzieć, ile pamięci można przydzielić dla instancji klasy.

4

Jest to definicja klasy

class wsx 
{ 
public: 
wsx(); 
} 

To jest definicja konstruktora

wsx::wsx() 
{ 
std::cout<<"WSX"; 
} 

To naprzód oświadczenie, że mówi, że klasa będzie zdefiniowana gdzieś

class wsx; 
2

Tak. Ale jest możliwe zdefiniowanie klasy bez jej deklarowania.

Ponieważ: Każda definicja jest również deklaracją.