该程序包含一个名为collection的类,它包含虚函数函数。我在main中创建的动态数组应该能够接受来自文件的任意数量的整数,每行包含一个文件号。它允许用户指定他们想要读取的文件名。这是头文件:
#ifndef Collection_H
#define Collection_H
class collection{
public:
collection(); //constructor
virtual void add(int value) = 0; //adds the value to the array
virtual void remove(int index) = 0; //removes and item from the appropriate index location
virtual void print() = 0; //prints item of the array comma seperated.
virtual int get(int index) = 0; //gets item at a particular index.
virtual int sum() = 0; //gets the sum of the array
virtual int size() = 0; //gets the size of the array
};
我对这个程序的第一个问题更具概念性:虚拟实际上做了什么,为什么要使用它,你如何实际实现它?我知道,因为你必须创建一个派生类才能实现虚函数。因此,这是我的派生类头:
// this is the derived collection
#include "Collection.h"
#ifndef derivedcollection_H
#define derivedcollection_H
class derivedcollection: public collection
{
public:
collection(); //constructor (error is at this line)
virtual void add(int value) = 0; //adds the value to the array
virtual void remove(int index) = 0; //removes and item from the appropriate index location
virtual void print() = 0; //prints item of the array comma seperated.
virtual int get(int index) = 0; //gets item at a particular index.
virtual int sum() = 0; //gets the sum of the array
virtual int size() = 0; //gets the size of the array
};
#endif
我的下一个也是最后一个问题更多的是我得到的一个我不理解的简单错误。对于collection();在我的派生类derivedcollection中声明,我收到一个错误,指出“显式类型缺失(假定'int')”。虽然这通常是一个简单的错误修复,但老实说它为什么它给我这个错误有点令人困惑。当我在我的派生类头而不是我的基类头中声明它时,它如何为我的默认构造函数提供此错误?
答案 0 :(得分:1)
有大量关于virtual
方法的文献和YouTube视频。关于错误,您的构造函数应为derivedcollection()
,而不是collection()
。
答案 1 :(得分:1)
有助于实现动态多态性的虚函数(OOP的支柱)在Web的许多教程中都有解释。
其中一个是explained here
virtual void add(int value) = 0;
表示它可能没有任何定义的 纯虚函数 。派生类必须实现其定义。
请注意,collection
不是派生类derivedcollection
的构造函数。
因此,编译器假定其返回类型为整数。即它是一种简单的方法。
构造必须是derivedcollection()
而不是collection()
。