use*_*501 3 c++ oop d multiple-inheritance
最近我对学习D编程语言产生了兴趣。(特别是 D2,在撰写本文时,人们所指的就是 D2,因为原始 D 现在处于维护模式,以与现有代码兼容。)
在我决定使用C++还是D之前(我已经了解C++,我对D一无所知),我想知道C++有什么比D更好的地方吗?如果您在线阅读有关 D 的内容,有很多材料只是简单地说“这是 C++ 代码的示例,这是 D 代码的示例,看看 - 它恰好要好得多”。对于所示的示例来说当然是正确的。
有些差异可能需要征求意见。例如,从派生类调用基类构造函数是由super()(D) 完成的,而不是<class name>(args)在初始化列表中(在:符号之后。)(C++)。我个人不喜欢这个,super但这只是我的意见,这不是我要问的问题。
更相关的是D不能支持多重继承。(!)
iostream//ifstream操作ofstream?)例如,您可能想要在 C++ 中做的一件事如下所示:
class base
{
}
class base_has_read_operation
{
public:
void read()
{
// complicated read function, 100000 lines of code...
}
virtual void do_read() = 0;
private;
// data
}
class base_has_write_operation
{
public:
void write()
{
// complicated write function, 100000 lines of code
}
virtual void do_write() = 0;
private:
// data
}
class reader : public base_has_read_operation
{
public:
void do_read()
{
read();
}
}
class writer : public base_has_write_operation
{
public:
void do_write()
{
write();
}
}
class read_writer : public base_has_read_operation, base_has_write_operation
{
public:
void do_read()
{
read();
}
void do_write()
{
write();
}
}
Run Code Online (Sandbox Code Playgroud)
但如果没有多重继承,你可能无法做到这一点?
您的多继承问题可以使用模板混合来解决,换句话说,将一段代码嵌入到另一段代码中。例子:
interface IWriter {
void do_write();
}
// It is a template, you can specify compile-time arguments
mixin template Write() {
// complicated write function
}
interface IReader {
void do_read();
}
mixin template Read() {
// complicated read function
}
// D has multiple interface inheritance
class ReaderWriter : IWriter, IReader {
void do_write {
// You can do other things before...
mixin Write; // The code of Write is inserted here
// ...or after
}
void do_read {
mixin Read;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以说,如果您的 ReaderWriter 拥有读取器和写入器的句柄,而不是依赖于过度耦合的多重继承,那么您的情况肯定会更好。