C++与数据结构
实验指导书
实验三 多态与虚函数
一、实验目的
1、理解多态的概念;
2、理解函数的静态联编和动态联编; 3、掌握虚函数的使用方法; 4、掌握抽象类的概念及使用方法。 二、实验内容
虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行动态联编,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的。通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象。多态指同一个方法根据其所属的不同对象可以有不同的行为。
虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数
1、录入下面程序,并分析结果:
#include
class Base {
public:
Base() {cout<<\ ~Base() {cout<<\
virtual void f(int){cout<<\
virtual void f(double){cout<<\ virtual void g(int i=10){cout<<\};
class Derived : public Base {
public:
Derived() {cout<<\ ~Derived(){cout<<\ void f(complex
cout<<\ }
void g(int i=20){
cout<<\ } };
int main() {
cout< Base b; Derived d; Base *pb=new Derived; b.f(1.0); d.f(1.0); pb->f(1.0); b.g(); d.g(); pb->g(); delete pb; return 0; } 2、录入下面程序,分析运行结果: #include public: Base():data(count) { cout<<\ ++count; } ~Base() { cout<<\ --count; } static int count; int data; }; int Base::count; class Derived : public Base { public: Derived():data(count),data1(data) { cout<<\ ++count; } ~Derived() { cout<<\ --count; } static int count; int data1; int data; }; int Derived::count=10; int main() { cout< Base* pb = new Derived[3]; cout< cout<<((static_cast cout< 3、录入下面程序,分析编译错误信息。 #include #include using namespace std; class Abstract { public: Abstract() { cout << \ } virtual void f() = 0; }; int main() { Abstract *p = new Abstract; p->f(); return 0; } 4、基类shape类是一个表示形状的抽象类,area( )为求图形面积的函数。请从shape类派生三角形类(triangle)、圆类(circles)、并给出具体的求面积函数。 #include class Shape {public: virtual float area( )=0 ; }; class Triangle : public Shape {private: float a,b; public: }; Triangle(float l,float h){a=l;b=h;cout<<\底:\高:\ virtual float area( ) {return 0.5*a*b;} class Triangle1 : public Shape {private: float x,y,z; public: Triangle1(float a,float b,float c){x=a;y=b;z=c;} virtual float area( ) {return 0.25*sqrt((x+y+z)*(x+y-z)*(x+z-y)*(y+z-x)); } }; class Circle : public Shape {private: float r; public: }; Circle(float rr){r=rr;cout<<\半径:\ virtual float area( ) {return r*r*3.14159;}