写了一个简单的抽象工厂,为什么编译不通过
#include <iostream>
using namespace std;
class plant {
public:
virtual void do_something() = 0;
};
class plantA : public plant {
public:
plantA() {
cout<<"plant A"<<endl;
}
void do_something() {
cout<<"plant A do something"<<endl;
}
};
class plantB : public plant {
public:
plantB() {
cout<<"plant B"<<endl;
}
void do_something() {
cout<<"plant B do something"<<endl;
}
};
class fruit {
public:
virtual createFruit() = 0;
};
class fruitA : public fruit {
public:
fruitA() {
cout<<"fruit A"<<endl;
}
void createFruit() {
cout<<"create friut A"<<endl;
}
};
class fruitB : public fruit {
public:
fruitB() {
cout<<"fruit B"<<endl;
}
void createFruit() {
cout<<"create fruit B"<<endl;
}
};
class abstractFactory {
public:
virtual createInstance() = 0;
};
class factoryA : public abstractFactory{
public:
factoryA() {
}
void createInstance() {
plantA *ap = new plantA;
friutA *fP = new fruitA;
}
};
class factoryB : public abstractFactory {
public:
factoyB() {
}
void createInstance() {
plantB *bp = new plantB;
friutB *fP = new fruitB;
}
};
void main()
{
abstractFactory *creater = new factoryA();
creater->createInstance();
}
报错:
main.cpp
D:\S_CODE\template_func2\abstract factory\main.cpp(47) : error C2555: 'fruitA::createFruit' : overriding virtual function differs from 'fruit::createFruit' only by return type or calling convention
D:\S_CODE\template_func2\abstract factory\main.cpp(35) : see declaration of 'fruit'
D:\S_CODE\template_func2\abstract factory\main.cpp(59) : error C2555: 'fruitB::createFruit' : overriding virtual function differs from 'fruit::createFruit' only by return type or calling convention
D:\S_CODE\template_func2\abstract factory\main.cpp(35) : see declaration of 'fruit'
D:\S_CODE\template_func2\abstract factory\main.cpp(74) : error C2555: 'factoryA::createInstance' : overriding virtual function differs from 'abstractFactory::createInstance' only by return type or calling convention
D:\S_CODE\template_func2\abstract factory\main.cpp(64) : see declaration of 'abstractFactory'
D:\S_CODE\template_func2\abstract factory\main.cpp(84) : warning C4183: 'factoyB': member function definition looks like a ctor, but name does not match enclosing class
D:\S_CODE\template_func2\abstract factory\main.cpp(86) : error C2555: 'factoryB::createInstance' : overriding virtual function differs from 'abstractFactory::createInstance' only by return type or calling convention
D:\S_CODE\template_func2\abstract factory\main.cpp(64) : see declaration of 'abstractFactory'
D:\S_CODE\template_func2\abstract factory\main.cpp(96) : error C2259: 'factoryA' : cannot instantiate abstract class due to following members:
D:\S_CODE\template_func2\abstract factory\main.cpp(69) : see declaration of 'factoryA'
D:\S_CODE\template_func2\abstract factory\main.cpp(96) : warning C4259: 'int __thiscall abstractFactory::createInstance(void)' : pure virtual function was not defined
D:\S_CODE\template_func2\abstract factory\main.cpp(66) : see declaration of 'createInstance'
D:\S_CODE\template_func2\abstract factory\main.cpp(96) : error C2259: 'factoryA' : cannot instantiate abstract class due to following members:
D:\S_CODE\template_func2\abstract factory\main.cpp(69) : see declaration of 'factoryA'
D:\S_CODE\template_func2\abstract factory\main.cpp(96) : warning C4259: 'int __thiscall abstractFactory::createInstance(void)' : pure virtual function was not defined
D:\S_CODE\template_func2\abstract factory\main.cpp(66) : see declaration of 'createInstance'
执行 cl.exe 时出错.
abstract factory.exe - 1 error(s), 0 warning(s)