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

C++在类声明中同时包含接口和实现,源于其结合C语言高效性和组织便利性的设计初衷。这导致编译依赖,但允许用户在栈上创建对象并兼容C结构体。尽管可以采用不完整类型或虚拟函数隐藏实现细节,但这会引入额外开销,且无法正常实现内联。《Effective C++》和《C++语言的设计和演化》对此有深入探讨。
摘要由CSDN通过智能技术生成

包含接口和实现的类声明

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之所以低效的一个很重要的原因是无法在栈和静态数据区(存放全局变量、 静态变量的区域)中创建用户自定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值