C++面试两题,大家帮忙来瞧瞧怎么答~
1.abstract class和interface有什么区别?
2.overload和override各是什么意思,有何区别?
简单吧,各位高手~怎么答?
问题点数:20、回复次数:16Top
1 楼Could(翻墙鹦鹉)回复于 2006-03-03 20:53:25 得分 0
c++里面有interface么?Top
2 楼bm1408(向va_list学习~不用VC好多年~)回复于 2006-03-03 20:58:44 得分 10
//多态性
编译时的多态性是通过重载(overload)来实现
运行时的多态性是通覆写(override)虚成员实现
@虚拟方法和覆写(override)--实现运行时的多态性
虚拟方法是指在即类中声明为virtual,又在一个或多个派生类中重新定义的方法。当派生类重新定义虚拟方法是,就要使用override关键字。虚拟方法不能被定义为static或abstract。方法重载形成了C#的一个重要概念:动态方法分配(dynamic mothod dispatch)。动态方法分配是一种在程序运行时,而不是在编译时调用重载函数的机制。动态方法分配概念非常重要,因为运行期多态是靠它实现的。
覆写(override)方法不是必须的,如果派生类没有提供覆写(override)虚拟方法,那么基类的方法就会被应用。例如:
1 using System;
2 class Base
3 {
4 public virtual void who()
5 {
6 Console.WriteLine("who() in Base");
7 }
8 }
9 class Derived1:Base
10 {
11 public override void who()
12 {
13 Console.WriteLine("who() in Derived1");
14 }
15 }
16 class Derived2:Base
17 {//不覆写who()方法
18 }
19
20 class NoOverrideDemo
21 {
22 public static void Main()
23 {
24 Base baseOb = new Base();
25 Derived1 dOb1 = new Derived1();
26 Derived2 dOb2 = new Derived2();
27
28 Base baseRef;//一个基类引用
29
30 baseRef = baseOb;
31 baseRef.who();
32
33 baseRef = dOb1;
34 baseRef.who();
35
36 baseRef = dOb2;
37 baseRef.who();//调用基类的方法who()
38 }
39 }
//程序输出如下:
who() in Base
who() in Derived1
who() in Base
//重载overload
方法名必须相同
参数列表必须不同
返回值类型可以不同
//覆写override
只有虚方法和抽象方法才能被覆写
相同的方法名
相同的参数列表
相同的返回值类型
//抽象(abstract)方法
必须被派生类覆写的方法。
可以看成是没有实现体的虚方法。
如果类中包含抽象方法,那么累就必须定义为抽象类,不论是否还包含其它一般方法。
abstract关键字只能用于通常的方法,不能用于静态的方法。
一起使用virtual和abstract是错误的。
Top
3 楼bm1408(向va_list学习~不用VC好多年~)回复于 2006-03-03 21:00:13 得分 0
1.abstract class和interface有什么区别?
------------
抽像类只是一种思想上的抽象,而且interface却是功能的抽象Top
4 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-03-03 21:19:02 得分 10
1.abstract class和interface有什么区别?
B.S 从一开始就强调用abstract base class 来实现interface。所以区别呢...自己看着办吧
2.overload和override各是什么意思,有何区别?
overload是指在同一个域中,引入同名不同型的函数
override是指在派生类中,定义一个和基类同名同型的函数,而且该基类中的那个函数必须是虚函数。否则就不叫override,而叫hideTop
5 楼wzjall(风)回复于 2006-03-03 21:46:06 得分 0
---------------
抽像类只是一种思想上的抽象,而且interface却是功能的抽象
-------------
说的好Top
6 楼bm1408(向va_list学习~不用VC好多年~)回复于 2006-03-03 21:49:24 得分 0
还不结贴~`
我这个周在等着抢分呢~Top
7 楼fiftymetre(50米深蓝)回复于 2006-03-03 22:41:56 得分 0
1. 相同及联系
A. 两者都是抽象类,都不能实例化。
B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。
2. 不同
A. interface需要实现,要用implements,而abstract class需要继承,要用extends。
B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。
C. interface强调特定功能的实现,而abstract class强调所属关系。
D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。这个选择有两点含义:
一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。
二是abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。
E. abstract class是interface与Class的中介。
interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstract class或Class中。
abstract class在interface及Class中起到了承上启下的作用。一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。
3. interface的应用场合
A. 类与类之前需要特定的接口进行协调,而不在乎其如何实现。
B. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
C. 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。
D. 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。
4. abstract class的应用场合
一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:
A. 定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
B. 某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。
C. 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能。
吼吼够全吧。找来的。Top
8 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-03 22:48:39 得分 0
怎么java的东东都来了.Top
9 楼qhfu(改个名字)回复于 2006-03-03 23:07:31 得分 0
分太少,人太多!Top
10 楼jobs002(Oh! Office)回复于 2006-03-04 07:49:12 得分 0
学习学习.................如果给分更好Top
11 楼wanyong775(渔民:小小的网少年)回复于 2006-03-04 08:56:20 得分 0
markTop
12 楼ytfrdfiw()回复于 2006-03-04 13:03:41 得分 0
好好。。。。Top
13 楼SammyLan((基础决定你能走多远)--英语菜才是真的菜)回复于 2006-03-04 14:03:56 得分 0
(=_=)Top
14 楼hyigle_love(parker)回复于 2006-03-04 14:38:29 得分 0
路过,跟帖,学习!Top
15 楼ra_zy()回复于 2006-03-04 14:50:04 得分 0
abstract class某些函数可以有具体的实现,接口则没有任何实现.Top
16 楼manplus(魅力加加)回复于 2006-03-04 16:02:38 得分 0
学习Top




