C++学习历程(六)构造函数与析构函数(纯虚函数)

原创 2018年04月15日 17:06:23

基类为图形类:包含长,宽,半径;
派生类Circle  :用来求圆的面积;
派生类Square :用来求矩形面积;

#include <iostream>
#define PI 3.1415926
using namespace std;

class Graph
{
    protected:
        int m_a,m_b;
        int m_r;
    public:
        Graph(int a,int b,int r);
        virtual void CircleArea() = 0; //纯虚函数i
        virtual void SquareArea() = 0;  
        ~Graph();
};

Graph::Graph(int a,int b,int r)
{
    cout << "Graph Consturctor!" << endl;
    m_a = a;
    m_b = b;
    m_r = r;
}

Graph::~Graph()
{
    cout << "Graph Desconstructor!" << endl;
}

class Circle : public Graph
{
    public:
        Circle(int a,int b,int r);
        void CircleArea();  //继承下来的纯虚函数必须有函数体,否则此类也会成为抽象类
        void SquareArea()    //抽象类则无法创建对象
        {
            
        }
        ~Circle();
};

Circle::Circle(int a,int b,int r) : Graph(a,b,r)
{
    cout << "Circle Constructor!" << endl;
}

void Circle::CircleArea()
{
    cout << "The Circle's mianji is : " << m_r * m_r * PI << endl;
}

Circle::~Circle()
{
    cout << "Circle Desstructor!" << endl;
}

class Square : public Graph
{
    public:
        Square(int a,int b,int r);
        void CircleArea()
        {

        }
        void SquareArea();
        ~Square();
};

Square::Square(int a,int b,int r) : Graph(a,b,r)
{
    cout << "Square Constructor!" << endl;
}

void Square::SquareArea()
{
    cout << "The Square's mianji is : " << m_a * m_b << endl; 
}

Square::~Square()
{
    cout << "Square Desconstructor!" << endl;
}


int main(int argc, char **argv)
{
    /*Circle a(3,5,7);
    Square b(3,5,8);

    a.CircleArea();
    b.SquareArea();*/
    Graph *pg = new Circle(3, 5, 7);  //向上转型,派生类地址赋值给基类指针,则基类可以调用派生类函数
    return 0;
}

C++中的构造函数/析构函数,虚函数/纯虚函数

1、构造函数能不能是虚函数:  1.1从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过...
  • KingCat666
  • KingCat666
  • 2015-04-07 10:35:45
  • 1241

在父类的构造函数和析构函数中都不能调用纯虚函数

基类中定了纯虚拟函数,派生类中将其实现,但在某些情况下会出现   r6025   runtime   error,   pure   virtual   function   call   这样的错误...
  • yockie
  • yockie
  • 2012-09-19 11:33:32
  • 1466

基类的纯虚析构函数一定要予以实现

纯虚函数 纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。 虚函数是C++语言的精髓。含有纯...
  • friendbkf
  • friendbkf
  • 2015-05-17 18:59:49
  • 2386

关于析构函数和纯虚函数

之前一直不知道,虚析构函数yo
  • guozhengdong
  • guozhengdong
  • 2014-09-29 22:18:33
  • 1127

C++虚函数,纯虚函数,构造函数

虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚函数 ...
  • wang371372
  • wang371372
  • 2014-12-03 18:34:23
  • 1289

C++构造函数和析构函数的总结

C++是面向对象的编程语言,在定义类的时候,离不开构造和析构函数。类中同类同名的成员函数称为构造函数,主函数中初始化一个对象时,如果有传入数据,其实是传入到构造函数的形参中。...
  • ladybai
  • ladybai
  • 2016-03-10 14:51:41
  • 4397

虚函数/纯虚函数,以及构造函数不能是虚函数原因

1.首先要了解什么是虚函数:      简单地说,那些被virtual关键字修饰的成员函数,就是虚函数(实现多态)。          作用:指向基类的指针在操作它的多态类对象时,会根据不同的类对象,...
  • qq_33854260
  • qq_33854260
  • 2017-07-15 11:26:39
  • 264

C++ 构造函数,析构函数中能否调用虚函数?

原文地址 http://blog.csdn.net/to_xidianhph_youth/article/details/39134801题1题2 题3class Base { public: ...
  • qq_26437925
  • qq_26437925
  • 2017-02-09 15:44:39
  • 290

c++构造函数和析构函数的区别?

构造函数: 什么是构造函数?通俗的讲,在类中,函数名和类名相同的函数称为构造函数。它的作用是在建立一个对象时,作某些初始化的工作(例如对数据赋予初值)。C++允许同名函数,也就允许在一个类中有多个构...
  • xinsong520
  • xinsong520
  • 2016-08-25 18:35:39
  • 756

C++为什么需要构造函数和析构函数

为什么要有构造函数和析构函数 在我们过去学习C语言编程的时候,我们通常生成的变量都是放在栈区里(auto存储类型)。然而,真正处理实际问题的程序却常常将变量或数组生成在堆区里。 假设我们定义了...
  • u013565071
  • u013565071
  • 2017-10-17 22:04:49
  • 455
收藏助手
不良信息举报
您举报文章:C++学习历程(六)构造函数与析构函数(纯虚函数)
举报原因:
原因补充:

(最多只允许输入30个字)