C面向对象程序设计虚函数与多态性

多态性是指一个名字,多种语义;或界面相同,多种实现。

重载函数是多态性的一种简单形式。

虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编

静态联编

联编是指一个程序模块、代码之间互相关联的过程。

静态联编,是程序的匹配、连接在编译阶段实现,也称为早期匹配。

重载函数使用静态联编。

动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编。

switch语句和if语句是动态联编的例子。

普通成员函数重载可表达为两种形式:

在一个类说明中重载

例如:  voidShow(int,char);

  voidShow(char*,float);

2.基类的成员函数在派生类重载。有3种编译区分方法:

(1)根据参数的特征加以区分

例如:voidShow(int,char);与

voidShow(char*,float);不是同一函数,编译能够区分

(2)使用“::”加以区分

例如:A::Show();

  有别于  B::Show();

(3)根据类对象加以区分

例如:Aobj.Show()  调用  A::Show()

  Bobj.Show()  调用  B::Show()

类指针的关系

基类指针和派生类指针与基类对象和派生类对象4种可能匹配:

直接用基类指针引用基类对象;

直接用派生类指针引用派生类对象;

用基类指针引用一个派生类对象;

用派生类指针引用一个基类对象。

基类指针引用派生类对象

例如:  

A*p;//指向类型A的对象的指针

AA_obj;  //类型A的对象

BB_obj;  //类型B的对象

p=A_obj;  //p指向类型A的对象

p=B_obj;  //p指向类型B的对象,它是A的派生类

利用p,可以通过B_obj访问所有从A类继承的元素,但不能用p访问B类自定义的元素(除非用了显式类型转换)

程序是最好的说明

#includeiostream

#includecstring

usingnamespacestd;

classA_class

{

charname[20];

public:

voidput_name(char*s){strcpy_s(name,s);}

voidshow_name(){coutname\n;}

};

classB_class:publicA_class

{

charphone_num[20];

public:

voidput_phone(char*num)

{

strcpy_s(phone_num,num);

}

voidshow_phone(){coutphone_num\n;}

};

intmain()

{A_class*A_p;A_classA_obj;

B_classB_obj;

A_p=A_obj;

A_p-put_name(Wangxiaohua);

A_p-show_name();

A_p=B_obj;

A_p-put_name(Chenming);

A_p-show_name();

B_obj.put_phone(_);

((B_class*)A_p)-show_phone();

}









































怎么样治疗白癜风
新疆治疗白癜风医院



转载请注明:http://www.nydjfy.com/pxxx/pxxx/825.html