Можно ли объявить класс без его реализации? (C ++) - PullRequest
8 голосов
/ 16 мая 2009

Я знаю, что вопросы кажутся неоднозначными, но я не мог придумать другого способа выразить это, но, возможно ли сделать что-то вроде этого:

#include<iostream>

class wsx;

class wsx
{
public:
wsx();
}

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

Ответы [ 6 ]

19 голосов
/ 16 мая 2009

Да, это возможно. Следующее просто объявляет wsx

class wsx;

Такое объявление называется предварительным объявлением, поскольку оно необходимо, когда два класса ссылаются друг на друга:

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

class A { B * b; };

Один из них должен быть заранее объявлен.

4 голосов
/ 16 мая 2009

Это определение класса

class wsx
{
public:
wsx();
}

Это определение конструктора

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

Это предварительное объявление, в котором говорится, что класс будет определен где-то

class wsx;
3 голосов
/ 16 мая 2009

В вашем примере,

class wsx; // this is a class declaration

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

Так что да, используя class wsx;, можно объявить класс, не определяя его. Объявление класса позволяет объявлять указатели и ссылки на этот класс, но не экземпляры класса. Компилятору нужно определение класса, чтобы он знал, сколько памяти выделить для экземпляра класса.

2 голосов
/ 16 мая 2009

Да. Но не можно определить класс, не объявив его.

Потому что: Каждое определение также является декларацией.

0 голосов
/ 16 мая 2009

Вы определили класс. В нем нет элементов данных, но в этом нет необходимости.

0 голосов
/ 16 мая 2009

Я не уверен, что вы имеете в виду. Вставленный вами код выглядит правильно.

...