期末模拟题题解
练习1
T1
考察了虚函数、派生类
#include<bits/stdc++.h>
using namespace std;
//基类
class Member{protected:int id;string name;int score;public:Member(int id,string name,int score){this->id=id;this->name=name;this->score=score;}virtual void Add(int money){score+=money;}virtual int Exchange(int exchangeScore){int money=exchangeScore/100;score-=money*100;return money;}virtual void Print(){cout<<"普通会员"<<id<<"--"<<name<<"--"<<score<<endl;}// virtual ~Member()// {
// // }
};
//派生类
class VIP:public Member
{private:int addr,exr;public:VIP(int id,string name,int score,int addr,int exr):Member(id,name,score){this->addr=addr,this->exr=exr;}void Add(int money) override{score+=money*addr;}int Exchange(int exchangeScore)override{int money=exchangeScore/exr;score-=money*exr;return money;}void Print()override{cout<<"贵宾会员"<<id<<"--"<<name<<"--"<<score<<endl;}
};
int main()
{Member *pm;int id;string name;int score;cin>>id>>name>>score;Member mm{id,name,score};int money,exchange;cin>>money>>exchange;pm=&mm;pm->Add(money);pm->Exchange(exchange);pm->Print();//VIPcin>>id>>name>>score;int addr,exr;cin>>addr>>exr;VIP vv{id,name,score,addr,exr};cin>>money>>exchange;pm=&vv;pm->Add(money);pm->Exchange(exchange);pm->Print();return 0;
}
T2
#include<bits/stdc++.h>
using namespace std;
class Metal{private:int hardness,weight,volume;public:Metal(int h=0,int w=0,int v=0):hardness(h),weight(w),volume(v){} //合并friend Metal operator+(const Metal& a,const Metal& b){return Metal(a.hardness+b.hardness,a.weight+b.weight,a.volume+b.volume);}//巨化friend Metal operator*(const Metal& a,int n){return Metal(a.hardness,a.weight,a.volume*n); } //硬化 Metal& operator++(){hardness++,weight*=1.1,volume*=1.1;return *this;}//软化 Metal& operator--(){hardness--;weight*=0.9;volume*=0.9;return *this;}void Print(){cout<<"硬度"<<hardness<<"--重量"<<weight<<"--体积"<<volume<<endl;}
};
int main()
{int h,w,v;cin>>h>>w>>v;Metal m1(h,w,v);cin>>h>>w>>v;Metal m2(h,w,v);Metal result=m1+m2;result.Print();int n;cin>>n;result=m1*n;result.Print();++m1;m1.Print();--m2;m2.Print(); return 0;
}
T3
#include<bits/stdc++.h>
using namespace std;
class Appliance{protected:int id,power;public:Appliance(int id,int power):id(id),power(power){}virtual void Print(){cout<<"编号"<<id<<"--功率"<<power<<"W"<<endl;}
};
class Fan:virtual public Appliance{protected:int direction,strength;public:Fan(int id,int power,int direction,int strength):Appliance(id,power),direction(direction),strength(strength){}void DirectionControl(int d){direction=d;}void PowerControl(int p){strength=p;}void Print() override{Appliance::Print();if(direction==0) cout<<"定向吹风";else cout<<"旋转吹风";cout<<"--风力"<<strength<<"级"<<endl; }
};
class Humidifier
:
virtual public Appliance
{protected:double water;double maxWater;public:Humidifier(int id,int power,double water,double maxWater):Appliance(id,power),water(water),maxWater(maxWater){}int Warning(){if(water>=maxWater*0.5){return 1;}else if(water>=maxWater*0.1){return 2;}else{return 3;}}void Print()override{Appliance::Print();int result=Warning();if(result==1) cout<<"水量正常"<<endl;else if(result==2) cout<<"水量偏低"<<endl;else cout<<"水量不足"<<endl;}
};
class HumidfyingFan
:
public Fan,
public Humidifier{private:int level;public:HumidfyingFan(int id,int power,int direction,int strength,double water,double maxWater,int level):Appliance(id,power),Fan(id,power,direction,strength),Humidifier(id,power,water,maxWater),level(level){}void Adjust(int l){level=l;if(level==0) return;if(level==1){DirectionControl(0);PowerControl(1);}else if(level==2){DirectionControl(1);PowerControl(2);}else if(level==3){DirectionControl(1);PowerControl(3);}}void Print()override{cout<<"加湿风扇--档位"<<level<<endl;cout<<"编号"<<id<<"--功率"<<power<<"W"<<endl;if(direction==0)cout<<"定向吹风";elsecout<<"旋转吹风";cout<<"--风力"<<strength<<"级"<<endl;int result=Warning();if(result==1)cout<<"水量正常"<<endl;else if(result==2)cout<<"水量偏低"<<endl;elsecout<<"水量不足"<<endl;}
};
int main()
{int n;cin>>n;while(n--){int id,power,direction,strength;double water,maxWater;int level;cin>>id>>power>>direction>>strength>>water>>maxWater>>level;HumidfyingFan fan(id,power,direction,strength,water,maxWater,level);int change;cin>>change;fan.Adjust(change);fan.Print();}return 0;
}
Test3 T3
#include<bits/stdc++.h>
using namespace std;class Audio {
private:string title;int length;public:Audio(string title,int length):title(title),length(length) {cout<<"Audio constructor"<<endl;}Audio():title(""),length(0) {cout<<"Audio constructor"<<endl;}virtual void set(string t,int l) {title=t;length=l;}virtual void print() {cout<<title<<" "<<length<<" ";}int getLength() {return length;}virtual ~Audio() {cout<<"Audio destructor"<<endl;}
};class Producer {
private:string name;public:Producer(string name):name(name) {cout<<"Producer constructor"<<endl;}Producer() {cout<<"Producer constructor"<<endl;}void set(string n) {name=n;}void Print() {cout<<name<<" ";}~Producer() {cout<<"Producer destructor"<<endl;}
};class Song:public Audio {
private:string singer;Producer producer;public:
//注意这里的producername Song(string title,int length,string singer,string producerName):Audio(title,length),singer(singer),producer(producerName) {cout<<"Song constructor"<<endl;}//producer也要记得 Song():Audio(),producer() {cout<<"Song constructor"<<endl;}void set(string singer,string title,int length,string producerName) override {this->singer=singer;Audio::set(title,length);producer.set(producerName);}void print() override {cout<<singer<<" ";Audio::print();producer.Print();cout<<endl;}~Song() {cout<<"Song destructor"<<endl;}
};int Select(Song s[],int n) {int index=0;for(int i=1;i<n;i++) {if(s[i].getLength()>s[index].getLength())index=i;}return index;
}int main() {int t;cin>>t;Song s[100];for(int i=0;i<t;i++) {string singer,title,producer;int length;cin>>singer>>title>>length>>producer;s[i].set(singer,title,length,producer);}int id=Select(s,t);s[id].print();return 0;
}