函数和变量的继承

时间:2016-10-24 00:14:12

标签: c++

我试图创建一个程序来跟踪排序进行比较的次数,但我不确定如何将变量传递给基类和从子类传递到子类。现在我得到一个错误说"错误:传递' const childsort'作为'这个'参数' void AbstractSort :: setConversions(int)'抛弃限定符[-fpermissive] |"

我有几个问题。使用子类是否继承了父类中的函数的目的是什么?如果是这样,我如何通过子类访问基类中的转换变量?如果没有,我是否需要子类中的局部变量和本地函数来计算转换?

#include <iostream>
using namespace std;

class AbstractSort
{
protected :
    int conversions;

public :
    AbstractSort(){};

    void setConversions(int c)
    { conversions = c; }

    int getConversions() const
    { return conversions; }

    int addConversions()
    { return conversions++; }

    virtual void sort(int arr[], int size) const = 0;
};


class childsort : public AbstractSort
{
    public :
        childsort() : AbstractSort(){}

        virtual void sort(int arr[], int size) const
        {
            int x = 0, y = 0, c = 0;

            for(x = 0; x < size - 1; ++x)
            {
                for(y = 0; y < size - x - 1; ++y)
                {
                    if(arr[y] > arr[y + 1])
                    {
                        int temp = arr[y];
                        arr[y] = arr[y + 1];
                        arr[y + 1] = temp;
                    }
                setConversions(c++);
                }
            }
        }
};

2 个答案:

答案 0 :(得分:1)

问:使用子类的目的不是继承父类的函数吗?

<答:是的,是的。基类中的方法必须是“公共”或“受保护”。此外,子类可以overridehide对应的基类方法。

在您的情况下,问题是一个简单的拼写错误:setConversions() vs setConversion()

===========================================

附录:你修正了拼写错误,然后你得到了这个(新的!)错误:

  

“const childsort为'''的'''参数   AbstractSort :: setConversions(int)'丢弃限定符......“

这是因为sort() .. constsetConversions()之间存在冲突。

看这里(类似的情况):

  

error: passing xxx as 'this' argument of xxx discards qualifiers

     

。所以当你尝试用const对象调用[your method]编译器时   检测到一个问题,即你正在调用一个非const成员函数   在const对象上,因为非const成员是不允许的   函数不承诺不修改对象;所以编译器是   打算安全地假设[你的方法]可能试图修改   对象,但同时,它也注意到对象是   常量;所以任何修改const对象的尝试都应该是一个错误。   因此编译器会生成错误消息。

答案 1 :(得分:-1)

您的编译错误是由

引起的
virtual void sort(int arr[], int size) const

是一个const方法,它调用非const setConversions()方法。

const方法只能调用其他const方法,无论是在自己的类中还是在超类中。此外,const方法无法修改任何非mutable类成员。