实验2 类和对象的定义与使用

实验2  类和对象的定义与使用

1、实验目的

(1)掌握类与对象的定义;

(2)掌握构造函数和析构函数的实现方法;

(3)掌握静态成员函数和友元函数的使用方法;

(4)掌握类对象作为成员的使用方法。

2、实验学时:6学时

3、实验内容

(1)声明一个CPU类,在该类中包括数据成员rank(等级)、frequency(频率)、voltage(电压)。其中,rank为字符型,可以取等级’A’、’B’、’C’、’D’;frequency为整型(单位MHz),voltage为浮点型;还包括成员函数GetRank( )、GetFrequency( )、GetVoltage( )用来获取等级、频率、电压的值。SetRank( )、SetFrequency( )、SetVoltage( )用来设置等级、频率、电压的值。Run( )、Stop( )中Run( )要求输出“CPU开始运行!”,Stop( )要求输出“CPU停止运行!”。构造函数需要输出“构造一个CPU”,析构函数需要输出“析构一个CPU”。观察构造函数和析构函数的调用顺序。编写主函数使用这个类定义两个对象cpu1,cpu2,调用不同在成员函数,观察数据的赋值和输出。

#include<iostream>
using namespace std;
class CPU
{    
    public:
        char rank='A'; 
        int frequency=1000;
        float voltage=220;
        CPU();
        ~CPU();
        int GetRank();
        int GetFrequency();
        int GetVoltage();
        int SetRank(char r);
        int SetFrequency(int f);
        int SetVoltage(float v); 
        int Run();
        int Stop();
}; 
    CPU::CPU()
    {
        cout<<"构造一个CPU"<<endl;
    }
    CPU::~CPU()
    {
        cout<<"析构一个CPU"<<endl; 
    }
    CPU::GetRank()
    {
        cout<<rank<<endl;
        return rank;
    }
    CPU::GetFrequency()
    {
        cout<<frequency<<endl;
        return frequency;
    }
    CPU::GetVoltage()
    {
        cout<<voltage<<endl;
        return voltage;
    }
    CPU::SetRank(char r)
    {
        rank=r;
        cout<<rank<<endl;
        return rank;
    }
    CPU::SetFrequency(int f)
    {
        frequency=f;
        cout<<frequency<<endl;
        return frequency;
    }
    CPU::SetVoltage(float v)
    {
        voltage=v;
        cout<<voltage<<endl;
        return voltage;
    }
    CPU::Run()
    {
        cout<<"CPU开始运行"<<endl;
    }
    CPU::Stop()
    {
        cout<<"CPU停止运行"<<endl;
    }
int main()
{
    CPU cpu1,cpu2;
    cpu1.GetRank();
    cpu1.GetFrequency();
    cpu1.GetVoltage();
    cpu1.SetRank('B');
    cpu1.SetFrequency(2200);
    cpu1.SetVoltage(110); 
    cpu1.Run();
    cpu1.Stop();
    cout<<endl;
    cpu2.GetRank();
    cpu2.GetFrequency();
    cpu2.GetVoltage();
    cpu2.SetRank('C');
    cpu2.SetFrequency(4400);
    cpu2.SetVoltage(50); 
    cpu2.Run();
    cpu2.Stop();
} 

(2)声明一个Student类,在该类中包括两个数据成员name(姓名)和score(分数)、两个静态数据成员total_score(学生总分)和count(学生人数);还包括两个成员函数show()用于输出学生的姓名、成绩和account( )用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum( )用于返回学生的成绩之和,另一个静态成员函数average( )用于求全班成绩的平均值。在main( )函数中,输入某班同学的姓名和成绩,输出所有学生的姓名和成绩,并调用上述函数求出全班学生的成绩之和和平均值。

#include<iostream>
#include<string>
using namespace std;
class Student
{
    private:
        string name;
        int score;
        int math;
        int english;
        int computer;
        int sums;
        int ave;
        int j=1;
        static int total_score;
        static int count;
    public:
        Student()
        {
        }
        string getname(string name);
        int show();
        void account(int m,int e,int c);//设置分数、累计学生的成绩之和、累计学生人数
        int outcount();
        static int sum();//返回学生的成绩之和
        static int average();//用于求全班成绩的平均值    
};
int Student::total_score;
int Student::count;
string Student::getname(string n)
{
    name=n;
    return name;
}
Student::show()
{
    cout<<"name:"<<name<<endl;
    cout<<"math:"<<math<<endl;
    cout<<"english:"<<english<<endl;
    cout<<"computer:"<<computer<<endl;
    cout<<"personal total_score:"<<sums<<endl;
    cout<<"personal average:"<<sums/3<<endl;
    cout<<"---------------------------------"<<endl;
    cout<<"class total_score:"<<sum()<<endl;
    cout<<"total average:"<<average()<<endl;
    cout<<"total count:"<<outcount()<<endl;
    return 0;
}
void Student::account(int m,int e,int c)
{
    math=m;
    english=e;
    computer=c;
    sums=math+english+computer;
    total_score=total_score+sums;
    count++;
}
Student::sum()
{
    return total_score;
}
Student::average()
{
    return total_score/count;
}
Student::outcount()
{
    return count;
} 
int main()
{
    Student stu[100];
    int i,n=0,j=1;
    string name;
    int math;
    int english;
    int computer;
    int score;
    while(1)
    {    
        cout<<"请决定是否继续输入学生信息,若继续则输入非0数字,若退出请输入0:";
        cin>>i;    
        cout<<endl;
        cout<<"-----------------------------------------------------------------" <<endl;
        if(i!=0)
        {
                cout<<j<<':' <<endl;
                cout<<"scanf name:";
                cin>>name;
                cout<<"scanf score of math:";
                cin>>math;
                cout<<"scanf score of english:";
                cin>>english;    
                cout<<"scanf score of computer:";
                cin>>computer;
                stu[n].getname(name);
                stu[n].account(math,english,computer);
                stu[n].sum() ;
                stu[n].average(); 
                n=n+1;
                j++;
        }
        else 
        {
            cout<<"Student information:"<<endl;
            for(i=0;i<n;i++)
            {
                stu[i].show();
                cout<<endl;
                cout<<endl;
            }    
            return 0;
        }
    
    }
    
}

(3)声明一个Car类,在该类中包括数据成员color(颜色)、speed(速度)和成员函数Input( )用于输入color和speed,利用友元函数Output()输出Car类对象数据。

#include<iostream>
#include<string>
using namespace std;
class car
{
    private:
        string colar;
        int speed;
    public:
        string input(string colar);
        int input(int speed);
        friend int output(car c1);
};
string car::input(string cloar) 
{
    return colar;
}
int car::input(int speed) 
{
    return speed;
}
int output(car c1)
{
    cout<<"colar:"<<c1.colar<<endl;
    cout<<"speed:"<<c1.speed<<endl;
}
int main()
{
    car c1;
    string colar;
    int speed;
    cout<<"Please scanf colar:";
    cin>>colar>>speed;
    cout<<endl;
    c1.input(colar);
    c1.input(speed);
    output(c1);
    return 0;
}

(4)声明日期Date类,包含数据成员year(年)、month(月)、day(日);人员Person类,包含数据成员id(编号)、name(姓名)、sex(性别)、birthday(出生日期),其中birthday定义为Date类内嵌子对象。用成员函数实现对人员信息的录入和显示。

/*声明日期Date类,
包含数据成员year(年)、month(月)、day(日);
人员Person类,包含数据成员id(编号)、name(姓名)、sex(性别)、birthday(出生日期),
其中birthday定义为Date类内嵌子对象。
用成员函数实现对人员信息的录入和显示。*/
#include<iostream>
#include<string>
using namespace std;

class Person
{
    private:
        string id;
        string name;
        string sex;
    public:
        Person()
        {
        }
        Person(string i,string n,string s)
        {
            id=i;
            name=n;
            sex=s;
        }
        void p();
        void get(string i,string n,string s);
};
void Person::get(string i,string n,string s)
{
    id=i;
    name=n;
    sex=s;
}
void Person::p() 
{
    cout<<"身份证号:"<<id<<endl;
    cout<<"姓名:"<<name<<endl;
    cout<<"性别:"<<sex<<endl;
}
class Date
{
    private:
        Person birthday;
        int year;
        int month;
        int day;
    public:
        Date()
        {
        }
        Date(string i,string n,string s,int y,int m,int d):year(y),month(m),day(d),birthday(i,n,s) 
        {
        }
        void p();
        void get(int y,int m,int d);
};
void Date::p() 
{
    //birthday.p();
    cout<<"出生日期:"<<year<<'.'<<month<<'.'<<day<<endl;
}
void Date::get(int y,int m,int d)
{
    year=y;
    month=m;
    day=d; 
}
int main()
{
    Person p[100]={Person("111","shengqiangshi","nan")};
    Date d[100]={Date("111","shengqiangshi","nan",2021,1,54)};
    string id;
    string name;
    string sex;
    int year;
    int month;
    int day;
    int i,j=1;
    while(1)
    {
        cout<<"-------------------------------------"<<endl;
        cout<<"请输入i的值(数字),如果退出则输入0:";
        cin>>i;
        if(i)
        {    
            cout<<"-------------------------------------"<<endl;
            cout<<"请输入身份证号:" ;
            cin>>id;
            cout<<"请输入姓名:";
            cin>>name;
            cout<<"请输入性别:";
            cin>>sex;
            cout<<"请输入出生年份:";
            cin>>year;
            cout<<"请输入出生月份:";
            cin>>month;
            cout<<"请输入出生日:";
            cin>>day;
            p[j].get(id,name,sex);    
            d[j].get(year,month,day);
            j++;
        } 
        else 
        {
            for(i=0;i<j;i++)
            {
                cout<<"-------------------------------------"<<endl;
                p[i].p();
                d[i].p();
                cout<<endl;
                cout<<"-------------------------------------"<<endl;
            }
            return 0;
        }
    }

}

 推荐几款学习编程的网站

免费在线开发平台(https://docs.ltpp.vip/LTPP/

        探索编程世界的新天地,为学生和开发者精心打造的编程平台,现已盛大开启!这个平台汇集了近4000道精心设计的编程题目,覆盖了C、C++、JavaScript、TypeScript、Go、Rust、PHP、Java、Ruby、Python3以及C#等众多编程语言,为您的编程学习之旅提供了一个全面而丰富的实践环境。

        在这里,您不仅可以查看自己的代码记录,还能轻松地在云端保存和运行代码,让编程变得更加便捷。平台还提供了私聊和群聊功能,让您可以与同行们无障碍交流,分享文件,共同进步。不仅如此,您还可以通过阅读文章、参与问答板块和在线商店,进一步拓展您的知识边界。

        为了提升您的编程技能,平台还设有每日一题、精选题单以及激动人心的编程竞赛,这些都是备考编程考试的绝佳资源。更令人兴奋的是,您还可以自定义系统UI,选择视频或图片作为背景,打造一个完全个性化的编码环境,让您的编程之旅既有趣又充满挑战。

免费公益服务器(https://docs.ltpp.vip/LTPP-SHARE/linux.html

        作为开发者或学生,您是否为搭建和维护编程环境而困扰?现在,有一款免费的公共服务器,内置多种编程语言的编程环境,并且配备了在线版VS Code。让您可以随时随地在线写代码,无需复杂配置,专注于开发和学习。(PS:毕竟是免费公共的服务器,任何人都能够使用,为了数据隐私和安全,请勿上传重要数据,仅用于学习)

免费公益MYSQL(https://docs.ltpp.vip/LTPP-SHARE/mysql.html

        作为一名开发者或学生,您是否常常为数据库环境的搭建而烦恼?是否因为预算有限而无法使用高性能的数据库服务?现在,有一款免费的MySQL服务器,专为开发者和学生量身打造,让你轻松无忧地进行开发和学习!内置在线phpmyadmin管理面板,方便用户查看数据。(PS:毕竟是免费公共的MYSQL,任何人都能够使用,为了数据隐私和安全,请勿上传重要数据,仅用于学习)

免费在线WEB代码编辑器(https://docs.ltpp.vip/LTPP-WEB-IDE/

        无论你是开发者还是学生,编程环境的搭建和管理可能会占用你宝贵的时间和精力。现在,有一款强大的免费在线代码编辑器,支持多种编程语言,让您可以随时随地编写、调试和运行代码,提升编程效率,专注于创意和开发。

免费二维码生成器(https://docs.ltpp.vip/LTPP-QRCODE/

        无论是企业宣传、活动推广,还是个人信息分享,二维码都是一种快速、高效的信息传递方式。现在,有一款功能强大的二维码生成器,不仅易于使用,还具备多种便捷功能,帮助您更轻松地生成和管理二维码。

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WA-自动机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值