pClass1 =(Class1 *)pBase-> next没有(Class1 *)cast

时间:2010-02-18 10:21:14

标签: c++ visual-studio-2008 inheritance operator-overloading

班级基地     {        基地*下一个;     }

class Class1 : Base
{
}

Base* pBase = new Base();
Class1* pTest = new Class1();
pBase->next = pTest;

Class1* pClass1;
pClass1 = (Class1*)pBase->next;

我希望能够写

pClass1 = pBase->next;

并且没有编译错误C2440(无法转换)。或者换句话说,我希望pClass1指向pBase->下一个指向的类。

是否可能出现一些运算符重载?怎么做?

3 个答案:

答案 0 :(得分:2)

template<class T>
class Base 
{ 
   T* next; 
} 

class Class1 : Base<Class1> 
{ 
} 

Class1* pTest1 = new Class1(); 
Class1* pTest2 = new Class1(); 
pTest1->next = pTest2;

Class1* pClass1; 
pClass1 = pTest1->next; 

答案 1 :(得分:1)

如果 - 在开发时 - 你确定下一个指向Class1的实例,接下来是一个Class1指针而不是Base指针。

如果您不确定,并且只在编译时知道它,则必须使用动态强制转换(可能接下来将指向Class2实例)。

答案 2 :(得分:1)

我能得到的最接近的是:

class Class1;

class Base
{
public:
    Base* next;

    operator Class1*()
    {
        return (Class1*)this;
    }
};

class Class1 : public Base
{
};

Base* pBase = new Base();
Class1* pTest = new Class1();
pBase->next     = pTest;

Class1* pClass1;
pClass1 = *pBase->next;

但这实际上是用C ++来搞乱你以后要付出的代价。只需使用Patrick提到的其中一个演员阵容。