c++抽象类、纯虚函数

    xiaoxiao2021-03-25  86

    1、录入下面程序,分析编译错误信息。

    #include <iostream> #include <new> #include <assert.h> using namespace std; class Abstract { public: Abstract() { cout << "in Abstract()\n"; } virtual void f() = 0; }; int main() { Abstract *p = new Abstract; p->f(); return 0; }

    分析:这个程序最大的问题就是Abstract *p = new Abstract;定义了一个抽象类的对象,然后让这个类的指针只想这个抽象类,显然这是错误的,因为抽象类是不能定义一个对象的,另外,p->f();这句指针指向一个纯虚函数,也是不对的,因为根本就没有对象,无从谈起调用函数。 2、基类shape类是一个表示形状的抽象类,area( )为求图形面积的函数。请从shape类派生三角形类(triangle)、圆类(circles)、并给出具体的求面积函数。#include<iostream.h> class shape { public: virtual float area( )=0 ; }; 完整代码:

    #include<iostream> #include<cmath> using namespace std; class shape { public: virtual double area()=0 ; }; class triangle:public shape{ public: triangle(double a,double b,double c){ A=a; B=b; C=c; } double area( ){ S=(A+B+C)/2; Area=sqrt(S*(S-A)*(S-B)*(S-C)) ; cout<<"三角形面积为:"<<Area<<endl; } private: double A,B,C,S,Area; }; class circle:public shape{ public: circle(double r):R(r){} double area(){ cout<<"圆面积为:"<<3.14*R*R<<endl; } private: double R; }; int main(){ triangle a(3,4,5); a.area(); circle b(5); b.area(); return 0; }

    3、定义一个抽象类Base,在该类中定义一个纯需函数virtual void abstractMethod() = 0;派生一个基于Base的派生类Derived,在派生类Derived的abstractMethod方法中输出”Derived::abstractMethod is called”,最后编写主函数,其内容如下:

    int main() { Base* pBase = new Derived; pBase->abstractMethod(); delete pBase; return 0; }

    完整代码

    #include<iostream> using namespace std; class Base{ public : virtual void abstractMethod()=0; }; class Derived:public Base{ public: virtual void abstractMethod(){ cout<<"Derived::abstractMethod is called"<<endl; } }; int main() { Base* pBase = new Derived; pBase->abstractMethod(); delete pBase; return 0; }

    分析:这个实验是让我们能够体会一下抽象类的使用,首先定义一个base抽象类,后面定义了派生类,新建一个派生类的对象让基类的指针指向派生类,通过指针调用纯虚函数,这算是就会调用派生类中函数。

    转载请注明原文地址: https://ju.6miu.com/read-15678.html

    最新回复(0)