虚函数 php,虚函数实例-luozhiyong131-ChinaUnix博客

/*

* 虚函数

* 没有使用虚函数,说明引用虚函数的目的

* Lzy2011-七夕

*/

#include

usingnamespace std;

staticint Line =1;

classCAnimal

{

protected:

char *name;

public:

CAnimal(char *na){

name = new char[strlen(na)+1];

strcpy(name, na);

}

void display(){cout

};

classCHerbivorous:public CAnimal

{

public:

CHerbivorous(char *na):CAnimal(na){}

void display(){cout

};

classCCarnivore:public CAnimal

{

public:

CCarnivore(char *na):CAnimal(na){}

void display(){cout

};

intmain(void)

{

CAnimal animal(""), *ptrAni;

ptrAni = &animal;

ptrAni->display();

CHerbivorous herb("小羊");

ptrAni = &herb;

ptrAni->display();

((CHerbivorous *)ptrAni)->display();

CCarnivore carn("老虎");

ptrAni = &carn;

ptrAni->display();

((CCarnivore *)ptrAni)->display();

return 0;

}

/*

* 虚函数

* Lzy2011-七夕

*/

#include

usingnamespace std;

staticint Line =1;

classCAnimal

{

protected:

char *name;

public:

CAnimal(char *na){

name = new char[strlen(na)+1];

strcpy(name, na);

}

virtual void display(){cout

};

classCHerbivorous:public CAnimal

{

public:

CHerbivorous(char *na):CAnimal(na){}

void display(){cout

};

classCCarnivore:public CAnimal

{

public:

CCarnivore(char *na):CAnimal(na){}

void display(){cout

};

intmain(void)

{

CAnimal animal(""), *ptrAni;

ptrAni = &animal;

ptrAni->display();

CHerbivorous herb("小羊");

ptrAni = &herb;

ptrAni->display();

((CHerbivorous *)ptrAni)->display();

CCarnivore carn("老虎");

ptrAni = &carn;

ptrAni->display();

((CCarnivore *)ptrAni)->display();

return 0;

}

/*

*虚函数的重载

*重载一个虚函数要求函数名、返回类型、参数个数参数类型以及参数的顺序都与基类中的原型相同,不能有任何的不同

* Lzy2011-七夕

*/

#include

#include

usingnamespacestd;

classPerson{

protected:

char*name;

public:

Person(char*n) {

name=newchar[strlen(n) + 1];strcpy(name,n);}

~Person() {delete[]name;}

virtualvoidprintInfo() {cout<

};

classWorker:publicPerson{

public:

Worker(char*n) :

Person(n) {

}

voidprintInfo() {

cout <

}

};

classTeacher:publicPerson{

public:

Teacher(char*n) :Person(n) {}

voidprintInfo() {

cout <

}

};

intmain(void) {

Workerw("小明");

Teachert("Lzy");

Person*p;

p = &w;

p->printInfo();

p = &t;

p->printInfo();

return0;

}

/*

*多继承中的虚函数

* Lzy2011-七夕

*/

#include

#include

usingnamespacestd;

classbase1

{

public:

virtualvoiddisplay(){cout<

};

classbase2

{

public:

voiddisplay(){cout<

};

classdervie:publicbase1,publicbase2

{

public:

voiddisplay(){cout<

};

intmain(void)

{

base1obj1, *ptr1;

base2obj2, *ptr2;

dervieobj3;

ptr1 = &obj1;

ptr1->display();

ptr1 = &obj3;

ptr1->display();//动态联编

ptr2 = &obj2;

ptr2->display();

ptr2 = &obj3;

ptr2->display();//静态联编

((dervie*)ptr2)->display();

return0;

}

/*

*多继承中的虚特性传递

* Lzy2011-七夕

*/

#include

#include

usingnamespacestd;

classA{

public:

virtualvoiddisplay() {

cout <

}

};

classbase1:virtualpublicA{

public:

voiddisplay() {

cout <

}

};

classbase2:virtualpublicA{

public:

voiddisplay() {

cout <

}

};

classdervie:publicbase1,publicbase2{

public:

voiddisplay() {

cout <

}

};

intmain(void) {

Aobj, *ptr;

base1obj1, *ptr1;

base2obj2, *ptr2;

dervieobj3;

ptr = &obj;ptr->display();

ptr1 = &obj1;ptr1->display();

ptr = &obj3;ptr->display();

ptr1 = &obj3;ptr1->display();

ptr2 = &obj3;ptr2->display();

return0;

}

/*

*虚析构函数

*基类的析构函数说明为虚析构函数,则它的派生类中的析构函数也是虚析构函数,不管它是否使用了关键字virtual进行说明

* Lzy2011-七夕

*/

#include

#include

usingnamespacestd;

classPerson{

protected:

char*name;

public:

Person(char*n) {name=newchar[strlen(n) + 1];strcpy(name,n);}

virtual~Person() {delete[]name;cout<

virtualvoidprintInfo() {cout<

};

classStudent:publicPerson{

private:

char*special;

public:

Student(char*n,char*s) :Person(n) {special=newchar[strlen(s) + 1];strcpy(special,s);}

~Student() {delete[]special;cout<

voidprintInfo() {

Person::printInfo();

cout <

}

};

intmain(void) {

Person*ptr1 =newPerson("李芸");

Person*ptr2 =newStudent("张雨","嵌入式");

Student*ptr3 =newStudent("崔健","计算机");

ptr1->printInfo();deleteptr1;

ptr2->printInfo();deleteptr2;

ptr3->printInfo();deleteptr3;

return0;

}

/*

*静态多态性是由函数重载、运算符重载来实现。

*动态多态性是通过虚函数来实现的

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值