草庐IT

多重性

全部标签

c++ - 多态性对于编写文本编辑器有多重要?

很多年前,当我对面向对象设计知之甚少时,我听到一个人说“你怎么能写一个没有多态性的文本编辑器?”我对OOP了解不多,因此当时我无法判断这有多明智,也无法提出任何具体问题。现在,经过多年的软件开发(主要是C++),我在设计软件时已经多次使用多态来解决各种问题。然而,我从未创建过文本编辑器。所以我还是无法评价那家伙的想法。对于在面向对象语言中实现文本编辑器来说,使用多态性如此重要吗?为什么? 最佳答案 编写文本编辑器的多态性绝不是必不可少的。事实上,解决任何编程问题的多态性并不是必需的。这只是一种方法。有时它使解决某些类型的问题更容易,

c++ - 当您使用多重继承时,静态转换何时安全?

我发现自己处于一种我知道某物是什么类型的情况。类型是三个(或更多)继承级别之一。我调用返回B*的工厂,但是T是类型的最高级别(如果我的代码知道它是什么)或第二级别。无论如何,我在模板中做了一个static_cast,这是错误的做法。我的问题是我什么时候可以安全地进行静态转换?有没有这样的时候?我在这种情况下这样做是因为当我不小心将T作为古怪的东西(已经发生并且)动态转换忽略(并返回null)时,我宁愿得到编译错误。但是,当我知道正确的类型时,指针没有调整,导致我的指针不好。我不知道为什么在这种情况下允许静态转换。什么时候可以安全地使用static_cast进行向下转换?有没有什么情况?

c++ - 当您使用多重继承时,静态转换何时安全?

我发现自己处于一种我知道某物是什么类型的情况。类型是三个(或更多)继承级别之一。我调用返回B*的工厂,但是T是类型的最高级别(如果我的代码知道它是什么)或第二级别。无论如何,我在模板中做了一个static_cast,这是错误的做法。我的问题是我什么时候可以安全地进行静态转换?有没有这样的时候?我在这种情况下这样做是因为当我不小心将T作为古怪的东西(已经发生并且)动态转换忽略(并返回null)时,我宁愿得到编译错误。但是,当我知道正确的类型时,指针没有调整,导致我的指针不好。我不知道为什么在这种情况下允许静态转换。什么时候可以安全地使用static_cast进行向下转换?有没有什么情况?

c++ - 关于 C++ 中的多重继承、虚拟基类和对象大小的问题

以下代码打印20,即sizeof(z)为20。#includeclassBase{public:inta;};classX:virtualpublicBase{public:intx;};classY:virtualpublicBase{public:inty;};classZ:publicX,publicY{};intmain(){Zz;cout而如果我在这里不使用虚拟基类,即对于以下代码:sizeof(z)是16。#includeclassBase{public:inta;};classX:publicBase{public:intx;};classY:publicBase{pub

c++ - 关于 C++ 中的多重继承、虚拟基类和对象大小的问题

以下代码打印20,即sizeof(z)为20。#includeclassBase{public:inta;};classX:virtualpublicBase{public:intx;};classY:virtualpublicBase{public:inty;};classZ:publicX,publicY{};intmain(){Zz;cout而如果我在这里不使用虚拟基类,即对于以下代码:sizeof(z)是16。#includeclassBase{public:inta;};classX:publicBase{public:intx;};classY:publicBase{pub

c++ - 在复杂的多重继承层次结构中, "virtual"关键字在哪里?

我了解C++虚拟继承的基础知识。但是,我对究竟需要在何处使用具有复杂类层次结构的virtual关键字感到困惑。例如,假设我有以下类:A/\BC/\/\DEF\/\/GH\/I如果我想确保没有一个类在任何子类中出现多次,哪些基类需要标记为virtual?他们全部?或者仅在那些直接从可能具有多个实例的类(即B、C、D、E和F;以及G和H)派生的类上使用它就足够了(但仅限于基类E,而不是与基类D和F))? 最佳答案 我一起玩弄了一个程序,它可以帮助您研究虚拟基地的复杂性。它将I下的类层次结构打印为适合graphiviz(http://ww

c++ - 在复杂的多重继承层次结构中, "virtual"关键字在哪里?

我了解C++虚拟继承的基础知识。但是,我对究竟需要在何处使用具有复杂类层次结构的virtual关键字感到困惑。例如,假设我有以下类:A/\BC/\/\DEF\/\/GH\/I如果我想确保没有一个类在任何子类中出现多次,哪些基类需要标记为virtual?他们全部?或者仅在那些直接从可能具有多个实例的类(即B、C、D、E和F;以及G和H)派生的类上使用它就足够了(但仅限于基类E,而不是与基类D和F))? 最佳答案 我一起玩弄了一个程序,它可以帮助您研究虚拟基地的复杂性。它将I下的类层次结构打印为适合graphiviz(http://ww

C++多重继承防止钻石

有没有办法在C++中定义一个类Foo这样我可以继承它我不能从中“继承钻石”即classCat:publicFoo{}//okayclassDog:publicFoo{}//okayclassWeird:publicCat,publicDog{}//Iwantthistothrowacompilererror 最佳答案 Cprogramming.com教程:用...解决C++中的菱形继承(钻石问题)http://www.cprogramming.com/tutorial/virtual_inheritance.html试试这个对于此类

C++多重继承防止钻石

有没有办法在C++中定义一个类Foo这样我可以继承它我不能从中“继承钻石”即classCat:publicFoo{}//okayclassDog:publicFoo{}//okayclassWeird:publicCat,publicDog{}//Iwantthistothrowacompilererror 最佳答案 Cprogramming.com教程:用...解决C++中的菱形继承(钻石问题)http://www.cprogramming.com/tutorial/virtual_inheritance.html试试这个对于此类

c++ - 多重继承和纯虚函数

以下代码:structinterface_base{virtualvoidfoo()=0;};structinterface:publicinterface_base{virtualvoidbar()=0;};structimplementation_base:publicinterface_base{voidfoo();};structimplementation:publicimplementation_base,publicinterface{voidbar();};intmain(){implementationx;}编译失败,出现以下错误:test.cpp:Infunctio