I have a problem with abstract / virtual classes, replication of the problem here:
#include <iostream>
class A
{
protected:
virtual std::string getDateTime() = 0;
virtual void Write(std::string data, bool addDate) = 0;
virtual bool CheckFile() = 0;
virtual bool OpenFile(std::string path) = 0;
virtual void CloseFile() = 0;
};
class B
: public A
{
public:
virtual std::string ToString() { return ""; };
virtual void Write(std::string data) { };
};
class C
: public A
{
protected:
std::string getDateTime()
{
return "TODAY";
};
void Write(std::string data, bool addDate)
{
std::cout << "BasicClassA Write" << std::endl;
};
bool CheckFile()
{
std::cout << "BasicClassA CheckFile" << std::endl;
return true;
};
bool OpenFile(std::string path)
{
std::cout << "BasicClassA OpenFile" << std::endl;
return true;
};
void CloseFile()
{
std::cout << "BasicClassA CloseFile" << std::endl;
};
};
class D
: public B,
public C
{
public:
BasicClassB();
virtual ~BasicClassB();
std::string ToString()
{
return "BasicClassB tostring";
};
void Write(std::string data)
{
std::cout << "BasicClassB Write" << std::endl;
};
};
int main(int ac, char *av[])
{
BasicClassB b;
std::cout << b.ToString() << std::endl;
b.Write("");
return 0;
}
This has a compilation error:
../src/main.cpp: 'int main (int, char **):
.. /src/main.cpp:82: error: 'b ' BasicClassB
.. /src/main.cpp:64: : "BasicClassB" :
.. /src/main.cpp:13: note: virtual std::string BaseClassA:: getDateTime()
.. /src/main.cpp:14: note: virtual void BaseClassA:: Write (std::string, bool)
.. /src/main.cpp:15: note: virtual bool BaseClassA:: CheckFile()
.. /src/main.cpp:16: note: virtual bool BaseClassA:: OpenFile (std::string)
.. /src/main.cpp:17: note: virtual void BaseClassA:: CloseFile()
, , BaseClassA ( BasicClassA) , BasicClassB BasicClassA, ?
? , ?
[ ]
I updated the class names as suggested by the comment
: A .
, - , , , , , ...
, "" , , , overriden ( )
, class Any: public virtual Anyother {}
(). , , ?