[C++]虛析構(gòu)函數(shù)

使用虛析構(gòu)函數(shù),才能調(diào)用子類的析構(gòu)函數(shù)

virtual在函數(shù)中的使用限制

1.普通函數(shù)不能是虛函數(shù)
2.靜態(tài)成員不能是虛函數(shù)
3.內(nèi)聯(lián)函數(shù)不能是虛函數(shù)
4.構(gòu)造函數(shù)不能為虛函數(shù)

Shape.h

#ifndef SHAPE_H
#define SHAPE_H

#include <iostream>
using namespace std;

class Shape {
public:
    Shape();
    ~Shape();
    virtual double calcArea();
};

#endif 

Shape.cpp

#include "Shape.h"

Shape::Shape()
{
    cout << "Shape()" << endl;
}

Shape::~Shape() {
    cout << "~Shape()" << endl;
}

double Shape::calcArea()
{
    cout << "Shape->calcArea()" << endl;
    return 0;
}

Coordinate.h

#ifndef COORDINATE_H
#define COORDINATE_H

class Coordinate {
public:
    Coordinate(int x,int y);
    ~Coordinate();
private:
    int m_iX;
    int m_iY;
};

#endif 

Coordinate.cpp:

#include"Coordinate.h"
#include <iostream>
using namespace std;

Coordinate::Coordinate(int x, int y)
{
    cout << "Coordinate" << endl;
    m_iX = x;
    m_iY = y;
}

Coordinate::~Coordinate()
{
    cout << "~Coordinate()" << endl;
}

Circle.h

#ifndef  CIRCLE_H
#define CIRCLE_H

#include "Shape.h"
#include "Coordinate.h"

class Circle : public Shape{
public:
    Circle(double r);
    ~Circle();
    double calcArea();
protected:
    double m_dR;
    Coordinate *m_pCenter;
};

#endif 

Circle.cpp:

#include "Circle.h"

Circle::Circle(double r)
{
    cout << "Circle()" << endl;
    m_dR = r;
    m_pCenter = new Coordinate(3, 5);
}

Circle::~Circle()
{
    cout << "~Circle()" << endl;
    delete m_pCenter;
    m_pCenter = NULL;
}
 
double Circle::calcArea() {
    cout << "Ciecle->calcArea()" << endl;
    return 3.14*m_dR*m_dR;
}

demo.cpp:

#include "Circle.h"

int main(void)
{
    Shape *shape2 = new Circle(5);
    delete shape2;
    system("pause");
    return 0;

}

運(yùn)行

Paste_Image.png

修改

#ifndef SHAPE_H
#define SHAPE_H

#include <iostream>
using namespace std;

class Shape {
public:
    Shape();
    virtual~Shape();
    virtual double calcArea();
};

#endif 

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容