fbpx
维基百科

协变返回值类型

面向对象程序设计中,实例函数的协变返回值类型指的是子类中的成员函数的返回值类型不必严格等同与该函数所重写的父类中的函数的返回值类型,而可以是更 "狭窄" 的类型。在 C++ 程序设计中。这是一种常见的编程范式,如下面的例子:

class BaseClass {}; class SubClass: public BaseClass {}; class BaseGenerator {  virtual BaseClass* generate(); }; class SubGenerator: public BaseGenerator {  virtual SubClass* generate(); }; 

但是协变类型不能兼容于泛型,如使用到智能指针泛型容器的场合,即如下的程序是不合法的:

class BaseClass {}; class SubClass: public BaseClass {}; class BaseGenerator {  virtual std::auto_ptr<BaseClass> generate(); }; class SubGenerator: public BaseGenerator {  virtual std::auto_ptr<SubClass> generate(); }; 

其原因是为了防止通过协变机制绕过类型机制,使得某个指针指向了一个不兼容类型的对象。如:

class BaseClass {}; class SubClassA: public BaseClass {}; class SubClassB: public BaseClass {}; int main(void) {  std::auto_ptr<SubClassA> subp(new SubClassA);  std::auto_ptr<BaseClass>& basep = subp; // 如果此句可以通过编译  basep.reset(new SubClassB); // 此句合法. 此时 subp 内的对象实际类型为与 SubClassA 不兼容的 SubClassB  return 0; } 

参见 编辑

协变与逆变

外部链接 编辑

协变返回值类型, 此條目需要补充更多来源, 2012年5月14日, 请协助補充多方面可靠来源以改善这篇条目, 无法查证的内容可能會因為异议提出而被移除, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, 此條目的语调或风格可能不適合百科全書的寫作方式, 2012年5月14日, 請根據指南協助改善这篇条目, 請在讨论页討論問題所在及加以改善, 在面向对象程序设计中, 实例函数的指的是子类中的成员函数的返回值类型不必严格等同与. 此條目需要补充更多来源 2012年5月14日 请协助補充多方面可靠来源以改善这篇条目 无法查证的内容可能會因為异议提出而被移除 致使用者 请搜索一下条目的标题 来源搜索 协变返回值类型 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 此條目的语调或风格可能不適合百科全書的寫作方式 2012年5月14日 請根據指南協助改善这篇条目 請在讨论页討論問題所在及加以改善 在面向对象程序设计中 实例函数的协变返回值类型指的是子类中的成员函数的返回值类型不必严格等同与该函数所重写的父类中的函数的返回值类型 而可以是更 狭窄 的类型 在 C 程序设计中 这是一种常见的编程范式 如下面的例子 class BaseClass class SubClass public BaseClass class BaseGenerator virtual BaseClass generate class SubGenerator public BaseGenerator virtual SubClass generate 但是协变类型不能兼容于泛型 如使用到智能指针或泛型容器的场合 即如下的程序是不合法的 class BaseClass class SubClass public BaseClass class BaseGenerator virtual std auto ptr lt BaseClass gt generate class SubGenerator public BaseGenerator virtual std auto ptr lt SubClass gt generate 其原因是为了防止通过协变机制绕过类型机制 使得某个指针指向了一个不兼容类型的对象 如 class BaseClass class SubClassA public BaseClass class SubClassB public BaseClass int main void std auto ptr lt SubClassA gt subp new SubClassA std auto ptr lt BaseClass gt amp basep subp 如果此句可以通过编译 basep reset new SubClassB 此句合法 此时 subp 内的对象实际类型为与 SubClassA 不兼容的 SubClassB return 0 参见 编辑协变与逆变外部链接 编辑Covariant Return Types in C 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title 协变返回值类型 amp oldid 64842517, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。