改错练习题:
#include <cstdlib>
#include <iostream>
using namespace std;
class A
{
public:
virtual ~A(){}
virtual void f() const = 0;
};
class B : public A
{
int *m_id;
public:
B(int val) : m_id(new int(val)){}
~B() { delete m_id; }
void f() const;
};
class Factory
{
int id_count;
public:
virtual A *createA()
{
return new B(++id_count);
}
};
class User
{
public:
void work(const Factory &factory) const
{
A *p = factory.createA();
p->f();
delete(p);
}
};
int main(int argc, char *argv[])
{
// A a(3.3,4,4);
cout << "Func(7.6,a,2.2)" << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
这时编译器会报错
F:\Tmp\C++\Trying\test0607.2.2.cpp passing `const Factory' as `this' argument of `virtual A* Factory::createA()' discards qualifiers
原因是声明了const类const Factory &factory之后,调用了类中的非const函数 factory.createA()
修改方法:
class Factory { int id_count; public: virtual A *createA()const { return new B(id_count); } };