为什么要用继承
子类不必复制父类的任何属性,已经继承下来了;易于维护与编写;
类的继承与派生
访问控制规则
一般只使用Public!
构造函数的继承与析构函数的继承
构造函数不被继承!
在创建子类对象的时候,会先调用父类的构造函数,再调用子类的构造函数
在消亡子类对象的时候,会先调用子类的析构函数,再调用父类的析构函数
派生类构造函数
派生类析构函数
作业
main.cpp
#include "shape.h"
#include "circle.h"
#include "rectangle.h"
#include "roundrectangle.h"
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(void) {
shape myshape1("red");
myshape1.display();
circle mycircle1;
mycircle1.display();
circle mycircle2("red",2);
mycircle2.display();
Rectangle myrectangle1("green",2,3);
myrectangle1.display();
RoundRectangle myroundrectangle1("yeelow",2,3,1);
myroundrectangle1.display();
return 0;
}
shape.cpp
#include "shape.h"
#include <iostream>
using namespace std;
shape::shape():color("white"){
cout<<"无参创建shape"<<endl;
}
shape::shape(string color){
this->color = color;
cout<<"有参创建shape"<<endl;
}
shape::~shape(){
cout<<"消亡shape"<<endl;
}
string shape::getColor(){
return this->color;
}
void shape::setcolor(char color){
this->color = color;
}
void shape::display(){
cout<<"color:"<<getColor()<<endl;
}
shape.h
#ifndef SHAPE_H
#define SHAPE_H
#include <string>
#include <iostream>
using namespace std;
class shape{
private:
string color;
public:
shape();
shape(string color);
~shape();
string getColor();
void setcolor(char color);
void display();
};
#endif
circle.cpp
#include "circle.h"
#include "shape.h"
#include <iostream>
const double pi = 3.14;
circle::circle(){
radius = 1;
cout<<"无参创建circle"<<endl;
}
circle::circle(string color,double radius):shape(color){
this->radius = radius;
cout<<"有参创建circle"<<endl;
}
circle::~circle(){
cout<<"消亡circle"<<endl;
}
double circle::getRadius(){
return this->radius;
}
void circle::setradius(double radius){
this->radius = radius;
}
double circle::getArea(){
return pi*radius*radius;
}
void circle::display(){
shape::display();
cout<<"R="<<getRadius()<<","<<"Area="<<getArea()<<endl;
}
circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
#include <string>
#include "shape.h"
class circle:public shape{
private:
double radius;
public:
circle();
circle(string color,double radius);
~circle();
double getRadius();
void setradius(double radius);
double getArea();
void display();
};
#endif
rectangle.cpp
#include "rectangle.h"
#include "shape.h"
#include <iostream>
Rectangle::Rectangle(){
width = 1;
height = 1;
cout<<"无参创建Rectangle"<<endl;
}
Rectangle::Rectangle(string color,double width,double height):shape(color){
this->width = width;
this->height = height;
cout<<"有参创建Rectangle"<<endl;
}
Rectangle::~Rectangle(){
cout<<"消亡Rectangle"<<endl;
}
double Rectangle::getWidth(){
return width;
}
double Rectangle::getHeight(){
return height;
}
void Rectangle::setWidth(double width){
this->width = width;
}
void Rectangle::setHeight(double height){
this->height = height;
}
double Rectangle::getArea(){
return width*height;
}
void Rectangle::display(){
shape::display();
cout<<"width="<<getWidth()<<","<<"Height="<<getHeight()<<","<<"Area="<<getArea()<<endl;
}
rectangle.h
#ifndef RECTANGLE_H
#define RECTANGLE_H
#include <string>
#include "shape.h"
class Rectangle:public shape{
private:
double width;
double height;
public:
Rectangle();
Rectangle(string color,double width,double height);
~Rectangle();
double getWidth();
double getHeight();
void setWidth(double width);
void setHeight(double height);
double getArea();
void display();
};
#endif
roundrectangle.cpp
#include "roundrectangle.h"
#include "rectangle.h"
#include"shape.h"
#include <iostream>
RoundRectangle::RoundRectangle(){
this->roundRadius = 1;
cout<<"无参创建RoundRectangle"<<endl;
}
RoundRectangle::RoundRectangle(string color,double width,double height,double roundRadius):Rectangle(color,width,height){
this->roundRadius = roundRadius;
cout<<"有参创建RoundRectangle"<<endl;
}
RoundRectangle::~RoundRectangle(){
cout<<"消亡RoundRectangle"<<endl;
}
double RoundRectangle::getRoundradius(){
return roundRadius;
}
void RoundRectangle::setRoundradius(double roundRadius){
this->roundRadius = roundRadius;
}
double RoundRectangle::getArea(){
return Rectangle::getWidth()*Rectangle::getHeight()+(3.14*roundRadius*roundRadius)/2;
}
void RoundRectangle::display(){
shape::display();
cout<<"width="<<Rectangle::getWidth()<<","<<"Height="<<Rectangle::getHeight()<<","<<"Area="<<getArea()<<endl;
}
roundrectangle.h
#ifndef ROUNDRECTANGLE_H
#define ROUNDRECTANGLE_H
#include <string>
#include "rectangle.h"
class RoundRectangle:public Rectangle{
private:
double roundRadius;
public:
RoundRectangle();
RoundRectangle(string color,double width,double height,double roundRadius);
~RoundRectangle();
double getRoundradius();
void setRoundradius(double roundRadius);
double getArea();
void display();
};
#endif