Loading

Loading

期末模拟题题解汇总

期末模拟题题解

练习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();
    //VIP
    cin>>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<<"定向吹风";
        else
            cout<<"旋转吹风";
        cout<<"--风力"<<strength<<"级"<<endl;
        int result=Warning();
        if(result==1)
            cout<<"水量正常"<<endl;
        else if(result==2)
            cout<<"水量偏低"<<endl;
        else
            cout<<"水量不足"<<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;
}
posted @ 2026-07-13 12:25  Miya555  阅读(9)  评论(0)    收藏  举报