C++ 继承: 父类与子类构造函数与析构函数的关系
一句话:调用子类构造函数时,父类的先调用,然后调用子类的构造函数。调用子类的析构函数时,先调用子类的析构函数,然后调用父类的析构函数。
例:点类,点派生的圆类
Circle.h
#ifndef CIRCLE_H_INCLUDED
#define CIRCLE_H_INCLUDED
#include "Point.h"
class Circle : public Point
{
public:
Circle();
Circle(int x, int y, int r);
~Circle();
void setRadius(int r);
int getRadius();
void printCircle();
private:
int radius;
};
#endif // CIRCLE_H_INCLUDED
Circle.cpp
#include <iostream>
#include "Point.h"
#include "Circle.h"
using namespace std;
Circle::Circle():Point()
{
cout << "circle 调用构造函数" << endl;
setRadius(0);
}
Circle::Circle(int x, int y, int r):Point(x, y)
{
cout << "circle 调用构造函数" << endl;
setRadius(r);
}
Circle::~Circle()
{
cout << "circle 调用析构函数" << endl;
}
void Circle::setRadius(int r)
{
radius=r;
}
int Circle::getRadius()
{
return radius;
}
void Circle::printCircle()
{
Point::printPoint();
cout << "Radis: " << getRadius() << endl;
}
Point.h
#include <iostream>
#include "Point.h"
#include "Circle.h"
using namespace std;
Circle::Circle():Point()
{
cout << "circle 调用构造函数" << endl;
setRadius(0);
}
Circle::Circle(int x, int y, int r):Point(x, y)
{
cout << "circle 调用构造函数" << endl;
setRadius(r);
}
Circle::~Circle()
{
cout << "circle 调用析构函数" << endl;
}
void Circle::setRadius(int r)
{
radius=r;
}
int Circle::getRadius()
{
return radius;
}
void Circle::printCircle()
{
Point::printPoint();
cout << "Radis: " << getRadius() << endl;
}