如何在Base类中创建两个具有相同名称的函数?

时间:2015-06-26 00:57:09

标签: c++ inheritance overloading virtual-functions

此代码已编译。

struct A
{
    const int *getX() const
        {
            return &x;
        }

    int *getX()
        {
            const A *thisConst = this;
            return const_cast<int *>(thisConst->getX());
        }


    void f()
        {
            int *p = getX();
        }

    int x;
};

但是这段代码没有。

struct I
{
    virtual const int *getX() const = 0;

    int *getX()
        {
            const I *thisConst = this;
            return const_cast<int *>(thisConst->getX());
        }
};

struct A : I
{
    virtual const int *getX() const
        {
            return &x;
        }

    void f()
        {
            int *p = getX();
        }

    int x;
};

'const_cast':无法从'const int *'转换为'int *'

我知道如果我给出不同的名字,它将被编译。但有没有功能重命名的方法?

1 个答案:

答案 0 :(得分:1)

  

'const_cast':无法从'const A *'转换为'int *'

在尝试编译程序时我没有收到此错误,而是

error: invalid conversion from 'const int*' to 'int*' [-fpermissive]

为了成功编译我更正了以下行

int *p = getX();

const  int *p = getX(); 

const int *int*是两种不同的类型,如果不进行强制转换或修改变量类型p,则无法直接指定它。