1

我需要一个类层次结构,其中派生类将实现一个返回类型不同的虚函数。我该怎么做。我尝试过的是以下代码:

using namespace std;
class Base
{
public:
    Base()
    {
        cout<<"Constructor of Base"<<endl;
    }
    virtual Base& Decode()=0;
    virtual operator int(){return -1;}
    virtual operator string(){return "WRONG";}
};
class Der1:public Base
{
    int i;
public:
    Der1(int j=0):Base(),i(j)
    {
        cout<<"COnstructor of Der1"<<endl;
    }
    Base& Decode()
    {
        cout<<"Decode in Der1"<<endl;
        return *this;
    }
    operator int()
    {
        return i;
    }
};
class Der2:public Base
{
    string s;
public:
    Der2(string temp="sajas"):Base(),s(temp)
    {
        cout<<"Constructor of Der2"<<endl;
    }
    Base& Decode()
    {
        cout<<"Decode in Der2"<<endl;
        return *this;
    }
    operator string()
    {
        return s;
    }
};
int main()
{
    Base *p=new Der1();
    int val=p->Decode();
}

我在想如果它可以以这种方式工作,用户只需将对象等同于一个有效变量。有没有办法在不包括 Base 中的所有转换运算符和一些虚拟实现的情况下做到这一点?

4

1 回答 1

0

我想有一个问题,如果它是纯虚函数,则无法创建类基对象。但另一方面,要解决您的问题,您可以尝试使用模板,如下所示。

#include <iostream>

class Base{
public:
    Base(){}
    virtual ~Base(){}
    virtual void show() const {
        std::cout << "Base::show()!" << std::endl;
    }
};
class A:public Base{
public:
    A(){}
    virtual ~A(){}
    virtual void show() const{
        std::cout << "A::show()!" << std::endl;
    }
};

template<typename T>
class Factory{
public:
    const T* operator()() const{
        return &t;
    }
private:
    T t;
};

int main(){
    const A* pA = Factory<A>()();
    pA->show();
    Factory<A>()()->show();
    return 0;
} 
于 2013-03-11T04:13:20.887 回答