在C++类声明中为什么既包含接口又包含实现

发布时间:2024年01月23日

包含接口和实现的类声明

C++备受一些人吐槽的一点是它在类的声明中既包含了实现细节又包含了接口细节,比如:

#include "Point.h"

class Circle {
public:
    double Area();      // 接口
private:
    double _radius;     // 实现
    Point _center;      // 实现
};

这其中带来的很大的一个问题就是有时候即使只是改变类内容的实现细节(比如Point 类 定义发生了变化,或者把_radius变成 float 类型),类的用户也需要重新编译自己的程 序(这通常称为编译依赖),这一点让很多人难以接受。(当然还存在其他问题,比如用户 知道了实现细节就可以通过一些手段欺骗编译器,写出一些依赖实现而不是依赖接口的代码 )。

为什么C++会如此定义

这种方式来自C++的前身C With Class,该语言的设计初衷是结合Simula语言在程序组 织上的便利性和C语言本身的高效性。当年C++之父使用Simula写模拟器,发现类的概念非 常好用,但是最终因为Simula本身效率非常的低而不得不使用BCPL语言重写。

他发现Simula之所以低效的一个很重要的原因是无法在栈和静态数据区(存放全局变量、 静态变量的区域)中创建用户自定

文章来源:https://blog.csdn.net/chenyuping333/article/details/135747771
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。