Объявите классы в заголовочных файлах.
Это сделано для того, чтобы объявление могло совместно использоваться несколькими исходными файлами (с #include) и, таким образом, подчиняться (Одно правило определения).
Традиционно(хотя и не обязательно), что каждый класс имеет свой собственный файл.Чтобы было проще и проще находить вещи, вы должны назвать файл после класса.Поэтому класс A
должен быть объявлен в A.h
и определен в A.cpp
.
MyInterface.h
class MyInterface
{
protected:
static int X;
static int Y;
static int Z;
public:
// If a class contains virtual functions then you should declare a vritual destructor.
// The compiler will warn you if you don't BUT it will not require it.
virtual ~MyInterface() {} // Here I have declared and defined the destructor in
// at the same time. It is common to put very simplistic
// definitions in the header file. But for clarity more
// complex definitions go in the header file. C++ programers
// dislike the Java everything in one file thing because it
// becomes hard to see the interface without looking at the
// documentaiton. By keeping only the declarations in the
// header it is very easy to read the interface.
virtual int doSomthing(int value) = 0; // Pure virtual
// Must be overridden in derived
};
А *
#include "MyInterface.h"
class A: public MyInterface
{
public:
virtual int doSomthing(int value);
};
Чч
#include "MyInterface.h"
class B: public MyInterface
{
public:
virtual int doSomthing(int value);
};
Ch
#include "MyInterface.h"
class C: public MyInterface
{
public:
virtual int doSomthing(int value);
};
Теперь вы определяете реализацию в исходных файлах:
MyInterface.cpp
#include "MyInterface.h"
// Static members need a definition in a source file.
// This is the one copy that will be accessed. The header file just had the declaration.
int MyInterface::X = 5;
int MyInterface::Y = 6;
int MyInterface::Z = 7;
A.cpp
#include "A.h"
// Define all the methods of A in this file.
int A::doSomthing(int value)
{
// STUFF
}
B.cpp
#include "B.h"
int B::doSomthing(int value)
{
// STUFF
}
C.cpp
#include "C.h"
int C::doSomthing(int value)
{
// STUFF
}