- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道的是:如果有一个基类,那么在 C++ 中每个*其他类继承自是不是一个好主意。基本上,它与 C# 的 Object 具有相同的接口(interface),即:
*直接接口(interface)和数据结构除外
class Object
{
public:
virtual ~Object() {}
virtual std::string toString() const = 0;
virtual Object* copy() const = 0;
virtual void release() = 0;
private:
// This operator overload calls toString() to print it out to the stream.
friend std::ostream& operator<<(std::ostream& output, const Object& object);
};
这是一件好事,还是如果我希望类被复制或转换为字符串,我最好只制作单独的接口(interface)。
例如
class Copyable
{
public:
virtual ~Copyable() {}
virtual Copyable* copy() const = 0;
};
我对此完全不确定,这让我很头疼。:(
最佳答案
我不会的。您的 Object
强制每个类实现这些纯虚方法。如果您真的不需要它们怎么办?
C++ 具有多重继承,因此您可以为每个用途创建一个单独的类,并让派生类决定它们需要哪些特征。
拥有这些虚函数也会增加开销,因为它会为每个类的每个实例添加一个 vptr。可能不会产生可怕的影响,但它不是 C++ 精神 IMO。
最近,C# 和 Java 的 Object
有一些有用的方法,因为它们在运行时有更多关于类型的信息。这使得所有类型都拥有一个根是合理的。一些 C++ 框架也具有它(想到 MFC 的 CObject
),但在该级别提供有用的设施在 C++ 中并非微不足道。您需要做的不仅仅是提供纯虚拟方法——拥有单一根的主要好处是通过继承而不是多态性获得共享实现。以多态方式使用您的 Object
只会破坏静态类型,在您的情况下,您甚至无法重用任何代码。
关于c++ - 基类 "Object",懒惰/聪明还是愚蠢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11358663/
不能制造愚蠢。具有下一个文件夹结构: /flint/double-conversion/src /燧石/愚蠢/愚蠢/ 其中/flint/folly 包含自述文件和许可证。作为in the readme
我有一个小问题,它可能在某个地方很愚蠢,但我仍然有它:) 所以问题是: 通过这样做 round(615.36*0.10, 2, PHP_ROUND_HALF_DOWN); 我希望结果是 61.53,但
我正在寻找一个只是为了大致了解应该如何正确设置标准 C++ 项目。(如果可能的话……:-p) 这是我对这个项目的要求: 基于模块(具有编译成主程序模块的库/模块) 编译跨平台 我想这样做,这样我就可以
我是一名优秀的程序员,十分优秀!