- 虚函数需要在一个完整的函数头前面加上
virtual
(在基类里面),在派生类里面不需要写virtual
,直接实现它即可,访问要使用基类的指针进行访问。 - 纯虚函数:
virtual void display()=0;
- 构造函数记得顺手初始化(指要顺带写出无参数构造函数)
- 多态和虚函数的题目一般会要求主函数要有一个基类指针,那么直接用这个基类指针来装载各种
new 基类
或者&基类
,然后使用->
方法访问 - 当题目有要求
static void computerMaxArea(Geometry** t,int n);//t为基类二级指针,指向一个基类动态数组,数组的每个元素指向一个子类图形,n为数组的大小
,做法:
Geometry **t=new Geometry*[n];
for(int i=0;i<n;i++){
int type;
cin>>type;
if(type==1){
int a,b;
cin>>a>>b;
t[i]=new Rect(a,b);
}
else{
int r;
cin>>r;
t[i]=new Circle(r);
}
}
然后根据基类的虚函数题目的特性,直接用指针数组里面的指针访问即可
本题的static 函数的访问方法:
TotalArea::computerMaxArea(t,n);
- 给出年月日算日期间隔的方法(按照年不同,月不同,日不同进行分类):
void display(CDate day){
int cnt=0;
if(day.gety()<current.gety()){
puts("error");
return;
}
else if(day.gety()==current.gety()){
if(day.getm()<current.getm()){
puts("error");
return;
}
else if(day.getm()==current.getm()){
if(day.getd()<current.getd()){
puts("error");
return ;
}
else{
cnt+= (day.getd()-current.getd());
}
}
else{
cnt+= (month[current.getm()]-current.getd());
for(int i=current.getm()+1;i<day.getm();i++){
cnt+=month[i];
}
cnt+=day.getd();
}
}
else{
isleap(day.gety());
for(int i=1;i<day.getm();i++){
cnt+=month[i];
}
cnt+=day.getd();
cnt+= (month[current.getm()]-current.getd());
for(int i=current.getm()+1;i<=12;i++){
cnt+=month[i];
}
}
- 数字转成string的方法:
int x=10000;
stringstream s;
s<<x;
string t=s.str();