设计类时的要点
1构造函数与析构函数:先在public中写上构造函数与析构函数
2成员函数:根据题目要求在public中声明成员函数;成员函数的实现在类内类外均可,注意若在类外实现时用::符号表明是哪个类的函数
3数据成员:关注题目中出现/所需的名词,一般在private中
【题目】分别定义一个shape类,rectangle类,circle类。shape类中有虚函数getPrim获取周长,在rectangle类和circle类实现各自的getPrim函数得到各自周长;并在main函数中测试
【破题关键】先回顾虚函数:允许在派生类中重新定义与基类同名的函数,且可以通过基类指针访问基类和派生类中的同名函数
·下面为代码及运行
【代码实现】下为可运行代码
//分别定义一个shape类,rectangle类,circle类。shape类中有虚函数getPrim获取周长,
//在rectangle类和circle类实现各自的getPrim函数得到各自周长;并在main函数中测试
//【注】虚函数:允许在派生类中重新定义与基类同名的函数
//且可以通过基类指针访问基类和派生类中的同名函数
#include "bits/stdc++.h"
#include<iostream>
using namespace std;
#define PI 3.14159
class shape{ //基类:图形
public:
shape(){}
~shape(){}
virtual float getPerim() const=0; //基类虚函数:获取周长
};
class Rectangle:public shape{ //子类:三角形
public:
Rectangle(){}
~Rectangle(){}
Rectangle(float l,float w):length(l),width(w){}
virtual float getPerim() const; //派生类虚函数:获取周长
private:
float length,width;
};
float Rectangle::getPerim() const{
return 2*(length+width);
}
class Circle:public shape{ //子类:圆形
public:
Circle(){}
~Circle(){}
Circle(float r):radius(r){}
virtual float getPerim() const; //派生类虚函数:获取周长
private:
float radius;
};
float Circle::getPerim() const{
return 2*PI*radius;
}
int main(){
shape *p; //基类指针
Circle circle(2);
Rectangle rectangle(2,3);
p=&circle; //通过基类指针访问派生类中同名函数
cout<<"The Perim of circle is ";
cout<<p->getPerim()<<endl;
p=&rectangle; //通过基类指针访问派生类中同名函数
cout<<"The Perim of rectangle is ";
cout<<p->getPerim()<<endl;
return 0;
}