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