}
intAnimal:
:
getHeight()const
{
returnheight;
}
intAnimal:
:
getWeight()const
{
returnweight;
}
virtualvoidAnimal:
:
setHeight(constinth)
{
height=h;
}
virtualvoidAnimal:
:
setWeight(constintw)
{
weight=w;
}
**********************************************************************
//lion.h
//Lion.h:
interfacefortheLionclass.
//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_LION_H__BA30A7B0_7A22_4CBE_8C67_C6A2B7369253__INCLUDED_)
#defineAFX_LION_H__BA30A7B0_7A22_4CBE_8C67_C6A2B7369253__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#include"animal.h"
classLion:
publicAnimal
{
public:
Lion(constint=0,constint=0);
virtualvoidprint()const;
};
#endif//!
defined(AFX_LION_H__BA30A7B0_7A22_4CBE_8C67_C6A2B7369253__INCLUDED_)
*********************************************************************
//lion.cpp
//Lion.cpp:
implementationoftheLionclass.
//
//////////////////////////////////////////////////////////////////////
#include
usingnamespacestd;
#include"Lion.h"
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
Lion:
:
Lion(constinth,constintw)
:
Animal(h,w){}
voidLion:
:
print()const
{
cout<<"Thisanimalisalion\n";
Animal:
:
print();
}
******************************************************************************
//dog.h
//Dog.h:
interfacefortheDogclass.
//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_DOG_H__20FB4370_AAE5_42B3_A67C_B6E7394399AA__INCLUDED_)
#defineAFX_DOG_H__20FB4370_AAE5_42B3_A67C_B6E7394399AA__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#include"Animal.h"
classDog:
publicAnimal
{
public:
voidsetName(constchar*);
virtualvoidprint()const;
virtualvoidgetHeight()const=0;
virtualvoidgetWeight()const=0;
constchar*getName()const;
Dog(constint=0,constint=0,constchar*="Toto");
private:
charname[30];
constbooluseMetric()const;
intmetricHeight;
intmetricWeight;
};
#endif//!
defined(AFX_DOG_H__20FB4370_AAE5_42B3_A67C_B6E7394399AA__INCLUDED_)
**********************************************************************
//dog.cpp
//Dog.cpp:
implementationoftheDogclass.
//
//////////////////////////////////////////////////////////////////////
#include
usingnamespacestd;
#include"Dog.h"
#include
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
Dog:
:
Dog(constinth,constintw,constchar*n)
:
Animal(h,w)
{
strcpy(name,n);
metricHeight=h*2.5;
metricWeight=w/2.2;
}
constchar*Dog:
:
getName()const{returnname;}
voidDog:
:
setName(constchar*n){strcpy(name,n);}
voidDog:
:
print()const
{
cout<<"Thisanimalisadog,itsnameis:
"
<Animal:
:
print();
}
intDog:
:
getHeight()
{
if(useMetric())
returnmetricHeight;
else
returnAnimal:
:
getHeight();
}
intDog:
:
getWeight()
{
if(useMetric())
returnmetricWeight;
else
returnAnimal:
:
getWeight();
}
constboolDog:
:
useMetric()const
{
intchoice=0;
cout<<"Whichunitswouldyouliketoseetheweightin?
"
<<"(Enter1or2)\n"
<<"\t1.metric\n"
<<"\t2.standard\n";
cin>>choice;
if(choice==1)
returntrue;
else
returnfalse;
}
**********************************************************************
//debug.cpp
#include
usingnamespacestd;
#include"animal.h"
#include"lion.h"
#include"dog.h"
voidsetHeightWeight(Animal);
intmain()
{
Dogd1(60,120,"Fido");
Lionlion1(45,300);
setHeightWeight(lion1);
setHeightWeight(d1);
return0;
}
voidsetHeightWeight(Animala)
{
inth,w;
a->print();
cout<<"Enteranewheight(usingstandardunits):
";
cin>>h;
a->setHeight(h);
cout<<"Enteranewweight(usingstandardunits):
";
cin>>w;
a->setWeight(w);
cout<<"Herearethenewheightandweightvalues:
\n"
<getHeight()<<getWeight()<}
阅读如下程序,试写出程序运行结果。
1、
#include
usingnamespacestd;
classA
{
public:
A(){cout<<“constructorofA“;foo();}
~A(){}
virtualvoidfoo(){cout<<“A:
:
foo()iscalled”<};
classB:
publicA
{
public:
virtualvoidfoo(){cout<<“B:
:
foo()iscalled”<};
voidtestFun(A*a)
{a->foo();}
intmain()
{
Ab,*a=newB();
cout<<“beginninginmain:
”<a->foo();
b.foo();
testFun(a);
deletea;
return0;
}
2、
#include
usingnamespacestd;
classA
{
intm;
public:
A(intnM):
m(nM){}
intF(){returnm;}
};
classB:
publicA
{
public:
B(intnM):
A(nM){}
virtualintF(){return0;}
};
intmain()
{
A*p=newB(5);
cout<<(*p).F()<return0;
}
3、
#include
usingnamespacestd;
classA
{
public:
virtualvoidF(){cout<<“A:
:
F()”<voidG(){cout<<“A:
:
G()\n”;}
voidH(){G();}
};
classB:
publicA
{
public:
voidF(){cout<<“B:
:
F()”<voidG(){coug<<“B:
:
G()\n”;}
};
classC:
publicB
{
public:
voi