gpt4 book ai didi

c++ - 继承和虚函数与泛型编程

转载 作者:IT老高 更新时间:2023-10-28 22:33:42 25 4
gpt4 key购买 nike

我需要了解在 C++ 中是否真的不需要继承和虚函数,并且可以使用通用编程 来实现一切。这来自 Alexander Stepanov,我正在观看的讲座是 Alexander Stepanov: STL and Its Design Principles

最佳答案

我总是喜欢将模板和继承视为两个正交概念,从字面意义上说:对我来说,继承是“垂直”的,从顶部的基类开始,然后“向下”到越来越多的派生类。每个(公共(public))派生类在其接口(interface)方面的基类: Poodle 是狗是动物。

另一方面,模板是“水平的”:模板的每个实例都有相同的正式代码内容,但两个不同的实例是完全独立的、不相关的部分以“平行”方式运行并且看不到对方。对整数数组进行排序在形式上与对 float 数组进行排序相同,但整数数组与 float 数组完全没有关系。

由于这两个概念是完全正交的,因此它们的应用也是如此。当然,您可以设计一种可以互相替换的情况,但是如果按照惯用方式完成,模板(泛型)编程和继承(多态)编程都是独立的技术,它们都有自己的位置。

继承是通过添加细节使抽象概念越来越具体。泛型编程本质上是代码生成

作为我最喜欢的例子,让我提一下这两种技术是如何在一个流行的类型删除实现中完美结合的:单个处理程序类拥有一个私有(private)多态指针,指向抽象容器的基类类和具体的派生容器类被确定为模板化类型推导构造函数。我们使用模板代码生成来创建任意系列的派生类:

// internal helper base
class TEBase { /* ... */ };

// internal helper derived TEMPLATE class (unbounded family!)
template <typename T> class TEImpl : public TEBase { /* ... */ }

// single public interface class
class TE
{
TEBase * impl;
public:
// "infinitely many" constructors:
template <typename T> TE(const T & x) : impl(new TEImpl<T>(x)) { }
// ...
};

关于c++ - 继承和虚函数与泛型编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8009475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com