Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在C+中更改接口+;_Oop_Design Patterns - Fatal编程技术网

Oop 在C+中更改接口+;

Oop 在C+中更改接口+;,oop,design-patterns,Oop,Design Patterns,我正在下面的链接上阅读一篇关于接口扩展的文章 第142页已经提到了这一点 随着时间的推移,添加这些请求可能会使接口膨胀 初始框架设计中未预期的功能。如果是新的 方法直接添加到“universalComponent”接口,所有 必须更新和重新编译客户端代码。这是一个冗长乏味的过程 容易出错 我的问题是(假设我们正在使用C++来开发)< /P> 为什么我们必须编译客户端代码,如果我们向接口添加新方法而不是 修改接口中的任何现有函数 谢谢 向涉及多态性的类添加方法(意味着它至少有一个虚拟成员函数)可

我正在下面的链接上阅读一篇关于接口扩展的文章

第142页已经提到了这一点

随着时间的推移,添加这些请求可能会使接口膨胀 初始框架设计中未预期的功能。如果是新的 方法直接添加到“universalComponent”接口,所有 必须更新和重新编译客户端代码。这是一个冗长乏味的过程 容易出错

我的问题是(假设我们正在使用C++来开发)< /P> 为什么我们必须编译客户端代码,如果我们向接口添加新方法而不是 修改接口中的任何现有函数


谢谢

向涉及多态性的类添加方法(意味着它至少有一个虚拟成员函数)可能会更改该类及其子类的对象的二进制布局。

向涉及多态性的类添加方法(意味着它至少有一个虚拟成员函数)可能会改变该类的对象的二进制布局和它的子类。

< P>我没有读过文章,但是首先,我建议不要强调C++中的“方法”和“接口”。这些术语在java等严格的OO语言中很流行,但是C++是一种更广泛、多范例的语言。 话虽如此,“向接口添加方法”实际上只是向基类添加更多虚拟成员函数。更改基类会更改所有派生类的定义,因此所有需要任何派生类或基类的完整类型的代码都必须重新编译


C++类型不是运行时功能。类型仅在编译时存在,并且编译器必须具有对类型定义的完全访问权限。(再次与其他语言形成对比!)接口实现关系纯粹存在于编译时,不能“预编译”。因此,实际上没有“修改接口”这样的事情会产生运行时模块化。“接口”概念只是一个简洁的助记符,您可以在设计应用程序时使用它,但它并不能避免重新编译。改变类定义改变了类的内部表示,并且除非(或)程序的所有部分都看到相同的类定义,否则不能(一般地)生成正确的C++程序。

< P>我没有读过文章,但是首先,我建议在C++中去强调术语“方法”和“接口”。这些术语在java等严格的OO语言中很流行,但是C++是一种更广泛、多范例的语言。 话虽如此,“向接口添加方法”实际上只是向基类添加更多虚拟成员函数。更改基类会更改所有派生类的定义,因此所有需要任何派生类或基类的完整类型的代码都必须重新编译

C++类型不是运行时功能。类型仅在编译时存在,并且编译器必须具有对类型定义的完全访问权限。(再次与其他语言形成对比!)接口实现关系纯粹存在于编译时,不能“预编译”。因此,实际上没有“修改接口”这样的事情会产生运行时模块化。“接口”概念只是一个简洁的助记符,您可以在设计应用程序时使用它,但它并不能避免重新编译。更改类定义会改变类的内部表示,并且除非程序的所有部分都看到相同的类定义,否则不能(一般地)生成正确的C++程序。