[问题] C++、C#,的接口、抽象类别

楼主: crazycat2 (浪无定所)   2014-12-07 16:11:52
不好意思,因为不太熟稔这两种语言
想请教有关C++、C#的差别
‧抽象类别(abstract class)
C++:Class中只要包含纯虚拟涵式(pure virtual)都是:
只能继承、不得实体化、可实做部分、可包含建构式?
一个类别可继承多个
C#:使用abstract:
只能继承、不得实体化、可实做部分、可包含建构式?
一个类别只能继承一个抽象类别
‧接口
C++:没有
C#:使用interface:
不能实体化、不能有建构式、不得实做类别。
一个类别可继承多个接口
请问是否常说C++的接口,其实就是C++的抽象类别?
C#的抽象类别 与 C++的抽象类别,是否仅有继承数量的差别?
谢谢各位了
作者: carylorrk (carylorrk)   2014-12-07 16:41:00
通常讲到 interface 会是指只有 pure virtual function的 class,不过跟 C#/Java 的 interface 还是完全不同要,基本上所有 base class 可能都需要。重点不在于base class 的成员,而是在 polymorphism 时正确利用到inheritance hierarchy 中的 destructor
楼主: crazycat2 (浪无定所)   2014-12-07 17:38:00
真的谢谢了。
作者: tinlans ( )   2014-12-07 19:45:00
如果是实现 strategy pattern,你的 concrete strategy本身不带状态,其实也是可以不用 virtual dtor 的。不过这样写很吃编译器实作,标准是说你用到多型导致动态跟静态型别不同,静态型别无 virtual dtor 又对静态型别的 pointer 做 delete 就是 undefined behavior。
楼主: crazycat2 (浪无定所)   2014-12-08 22:16:00
谢谢T大的解释,我会重复想一下的。

Links booklink

Contact Us: admin [ a t ] ucptt.com