Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 何处使用虚拟函数_C++_Unix_Inheritance_Polymorphism - Fatal编程技术网

C++ 何处使用虚拟函数

C++ 何处使用虚拟函数,c++,unix,inheritance,polymorphism,C++,Unix,Inheritance,Polymorphism,我想使用继承和多态性创建一个虚构的小型unix层次结构 我有一个类命名文件,该类有以下数据成员: -字符串名称 并且类文件假定具有以下操作: -函数path(返回文件的路径) -功能ls(类似于ls命令) -功能cd(类似于cd命令) -函数cp(将给定文件复制到当前文件) 还有从文件类派生的其他类。 *类目录是一个特殊文件,可以在其中保存许多文件。 *类TextFile是一个包含文本的文件 在主功能中运行的示例如下: Direcrory mydir(“mydir”); TextFile myT

我想使用继承和多态性创建一个虚构的小型unix层次结构

我有一个命名文件,该类有以下数据成员:
-字符串名称

并且类文件假定具有以下操作:
-函数path(返回文件的路径)
-功能ls(类似于ls命令)
-功能cd(类似于cd命令)
-函数cp(将给定文件复制到当前文件)

还有从文件类派生的其他类。
*类目录是一个特殊文件,可以在其中保存许多文件。
*类TextFile是一个包含文本的文件

在主功能中运行的示例如下:

Direcrory mydir(“mydir”);
TextFile myText(“mytext”, ....);
mydir.cp(myText);
mydir.ls();
伙计们,事情是这样的。我可以在没有继承和多态性的情况下实现它。但我希望它是面向对象的。所以我有两个问题?
1-)我无法决定哪个函数应该是虚拟的。
2-)以及如何在不存储额外数据成员的情况下实现路径函数

我想了两天。但我找不到这么好的解决办法。如果你能帮助我,我将非常高兴。
提前谢谢

1-)我无法决定哪个函数应该是虚拟的

如果您的结构是
Base*parent=new Child()
,并且希望调用
Child
的重写方法,那么这些函数应该是虚拟的。 如果有此结构,则声明析构函数为虚拟

2-)以及如何在不存储额外数据的情况下实现路径函数 成员

因为路径基本上是一个字符串,所以可以将路径存储在父类中。从
path
函数返回字符串,不要在子类中重写此函数。就这样。字符串的几个字节有什么问题


毫无疑问,只要想一想“在现实生活中,它的行为像它吗?”

对象不一定要有虚拟函数才能以“面向对象的风格”行事。虚拟函数是OOP中的工具,不是目标。我不认为你这样做是正确的。首先,在Unix和派生系统中,文件和引用该文件的目录项(可能是多个目录项之一)之间存在分隔。其次,以
cp
界面为例。您的层次结构建议您可以将任何(!)文件(包括目录)复制到文本文件,反之亦然,这是没有意义的。这类似于关于圆和椭圆之间的继承关系的经典问题,在web上搜索它,你就会明白。好的,但我有一个可重用的代码。我认为多态性是好的,多态性是好的。但也可能是不好的。不,反之亦然。我们无法将文件复制到文本文件。或者无法将cd刻录到文本文件。首先,谢谢你的回答。析构函数已经是虚拟的。但我认为其中一个函数应该是虚拟的。