2023级cpp第二学期上机练习题第2次(构造函数、析构函数)

题源地址

1:构造函数-1

描述

定义一个长方形类Rectangle,类的成员包括:

1、width:长方形的宽,double类型,私有

2、height:长方形的高,double类型,私有

3、构造函数Rectangle(double, double):设置长方形的宽和高,第一个参数赋给宽,第二个参数赋给高

4、double getCir()函数:返回长方形的周长,公有

5、double getArea()函数:返回长方形的面积,公有

规定主函数是如下代码(不可以修改),根据输入输出,设计Rectangle类以满足要求。

int main()
{
 double w, h;
 cin >> w >> h;
 Rectangle r(w, h);
 cout << r.getCir() << endl;
 cout << r.getArea() << endl;
 return 0;
}

输入

只有一组案例。两个浮点数w和h,分别表示长方形的宽和高。

输出

长方形的周长,换行。

长方形的面积,换行。

样例输入

5 3.5

样例输出

17

17.5

关键点:

        理解构造函数及其作用。

代码:

/*
定义一个长方形类Rectangle,类的成员包括:

1、width:长方形的宽,double类型,私有

2、height:长方形的高,double类型,私有

3、构造函数Rectangle(double, double):设置长方形的宽和高,第一个参数赋给宽,第二个参数赋给高

4、double getCir()函数:返回长方形的周长,公有

5、double getArea()函数:返回长方形的面积,公有

规定主函数是如下代码(不可以修改),根据输入输出,设计Rectangle类以满足要求。

int main()
{
 double w, h;
 cin >> w >> h;
 Rectangle r(w, h);
 cout << r.getCir() << endl;
 cout << r.getArea() << endl;
 return 0;
}
*/

#include <iostream>
using namespace std;

class Rectangle
{
private:
    double width;
    double height;
public:
    Rectangle(double w, double h) : width(w), height(h) {}
    /*
    // 也可以这样写
    Rectangle(double w, double h)
    {
        width = w;
        height = h;
    }
    */

    // 成员函数
    double getCir()
    {
        return 2 * (width + height);
    }
    double getArea()
    {
        return width * height;
    }
};

int main()
{
 double w, h;
 cin >> w >> h;

 Rectangle r(w, h);
 cout << r.getCir() << endl;
 cout << r.getArea() << endl;

 return 0;
}

2:构造函数-2

描述

定义一个长方形类Rectangle,类的成员包括:

1、width:长方形的宽,double类型,私有

2、height:长方形的高,double类型,私有

3、构造函数Rectangle():什么事都不做

4、构造函数Rectangle(double, double):设置长方形的宽和高,第一个参数赋给宽,第二个参数赋给高

5、void setWidth(double)函数:设置长方形的宽,公有

6、void setHeight(double)函数:设置长方形的高,公有

7、double getCir()函数:返回长方形的周长,公有

8、double getArea()函数:返回长方形的面积,公有

规定主函数是如下代码(不可以修改),根据输入输出,设计Rectangle类以满足要求。

int main()
{
 double w1, h1, w2, h2;
 cin >> w1 >> h1 >> w2 >> h2;
 Rectangle r1(w1, h1);
 Rectangle r2;
 r2.setWidth(w2);
 r2.setHeight(h2);
 cout << r1.getCir() << endl;
 cout << r1.getArea() << endl;
 cout << r2.getCir() << endl;
 cout << r2.getArea() << endl;
 return 0;
}

输入

只有一组案例。四个浮点数w1、h1、w2、h2,分别表示第一个长方形的宽和高、第二个长方形的宽和高。

输出

第一个长方形的周长,换行。

第一个长方形的面积,换行。

第二个长方形的周长,换行。

第二个长方形的面积,换行。

样例输入

5 3.5 1 2

样例输出

17

17.5

6

2

关键点:

        理解构造函数及其作用。

代码:

/*
定义一个长方形类Rectangle,类的成员包括:

1、width:长方形的宽,double类型,私有

2、height:长方形的高,double类型,私有

3、构造函数Rectangle():什么事都不做

4、构造函数Rectangle(double, double):设置长方形的宽和高,第一个参数赋给宽,第二个参数赋给高

5、void setWidth(double)函数:设置长方形的宽,公有

6、void setHeight(double)函数:设置长方形的高,公有

7、double getCir()函数:返回长方形的周长,公有

8、double getArea()函数:返回长方形的面积,公有

规定主函数是如下代码(不可以修改),根据输入输出,设计Rectangle类以满足要求。

int main()
{
 double w1, h1, w2, h2;
 cin >> w1 >> h1 >> w2 >> h2;
 Rectangle r1(w1, h1);
 Rectangle r2;
 r2.setWidth(w2);
 r2.setHeight(h2);
 cout << r1.getCir() << endl;
 cout << r1.getArea() << endl;
 cout << r2.getCir() << endl;
 cout << r2.getArea() << endl;
 return 0;
}
*/

#include <iostream>
using namespace std;

class Rectangle
{
private:
    // 成员变量
    double width;
    double height;
public:
    // 构造函数
    Rectangle() {}
    Rectangle(double w, double h) : width(w), height(h) {}
    
    // 成员函数
    void setWidth(double w) { width = w; }
    void setHeight(double h) { height = h; }
    double getCir() { return 2 * (width + height); }
    double getArea() { return width * height; }
};

int main()
{
 double w1, h1, w2, h2;
 cin >> w1 >> h1 >> w2 >> h2;
 Rectangle r1(w1, h1);
 Rectangle r2;
 r2.setWidth(w2);
 r2.setHeight(h2);
 cout << r1.getCir() << endl;
 cout << r1.getArea() << endl;
 cout << r2.getCir() << endl;
 cout << r2.getArea() << endl;
 return 0;
}

3:构造函数-3

描述

定义一个学生类Student,类的成员包括:

1、name:姓名,string类型,私有

2、score:成绩,double类型,私有

3、构造函数Student():什么都不做

4、构造函数Student(string, double):初始化学生的姓名和成绩

5、string getName():返回姓名,公有

6、double getScore()函数:返回成绩,公有

规定主函数是如下代码(不可以修改),根据输入输出,设计Student类以满足要求。

int main()
{
 string n;
 double a;
 cin >> n >> a;
 Student s(n, a);
 cout << s.getName() << endl;
 cout << s.getScore() << endl;
 return 0;
}

输入

只有一组案例。字符串n和浮点数a,分别表示姓名和成绩。

输出

姓名,换行。

成绩,换行。

样例输入

Tom 80

样例输出

Tom

80

关键点:

        红月当日,已经没有时间了,情况开始失控了。

代码:

/*
定义一个学生类Student,类的成员包括:

1、name:姓名,string类型,私有

2、score:成绩,double类型,私有

3、构造函数Student():什么都不做

4、构造函数Student(string, double):初始化学生的姓名和成绩

5、string getName():返回姓名,公有

6、double getScore()函数:返回成绩,公有

规定主函数是如下代码(不可以修改),根据输入输出,设计Student类以满足要求。

int main()
{
 string n;
 double a;
 cin >> n >> a;
 Student s(n, a);
 cout << s.getName() << endl;
 cout << s.getScore() << endl;
 return 0;
}
*/

#include <iostream>
#include <string>
using namespace std;

class Student
{
private:
    // 成员变量
    string name;
    double score;
public:
    // 构造函数
    Student() {}
    Student(string n, double s) : name(n), score(s) {}

    // 成员函数
    string getName() { return name; }
    double getScore() { return score; }
};

int main()
{
 string n;
 double a;
 cin >> n >> a;
 Student s(n, a);
 cout << s.getName() << endl;
 cout << s.getScore() << endl;
 return 0;
}

4:构造函数和析构函数-1

描述

定义一个学生类Student,类的成员包括:

1、name:姓名,string类型,私有

2、score:成绩,double类型,私有

3、构造函数Student(string, double):初始化学生的姓名和成绩,并且输出“[name]'s constructor”,其中[name]要用具体的值。

4、析构函数~Student():输出“[name]'s destructor”,其中[name]要用具体的值。

5、string getName():返回姓名,公有

6、double getScore()函数:返回成绩,公有

规定主函数是如下代码(不可以修改),根据输入输出,设计Student类以满足要求。

int main()
{
 string n1, n2;
 double a1, a2;
 cin >> n1 >> a1 >> n2 >> a2;
 Student s1(n1, a1), s2(n2, a2);
 cout << s1.getName() << " " << s1.getScore() << endl;
 cout << s2.getName() << " " << s2.getScore() << endl;
 return 0;
}

输入

只有一组案例。字符串n1、浮点数a1、字符串n2、浮点数a2,分别表示第一个学生姓名和成绩、第二个学生姓名和成绩。

输出

[第一个学生的姓名]'s constructor

[第二个学生的姓名]'s constructor

[第一个学生的姓名][空格][第一个学生的成绩]

[第二个学生的姓名][空格][第二个学生的成绩]

[第二个学生的姓名]'s destructor

[第一个学生的姓名]'s destructor

每行输出结果后面都有换行。
 

样例输入

Tom 80 Jerry 85

样例输出

Tom's constructor
Jerry's constructor
Tom 80
Jerry 85
Jerry's destructor
Tom's destructor

关键点:

        析构函数:销毁类对象时启用

代码:

/*
定义一个学生类Student,类的成员包括:

1、name:姓名,string类型,私有

2、score:成绩,double类型,私有

3、构造函数Student(string, double):初始化学生的姓名和成绩,并且输出“[name]'s constructor”,其中[name]要用具体的值。

4、析构函数~Student():输出“[name]'s destructor”,其中[name]要用具体的值。

5、string getName():返回姓名,公有

6、double getScore()函数:返回成绩,公有

规定主函数是如下代码(不可以修改),根据输入输出,设计Student类以满足要求。

int main()
{
 string n1, n2;
 double a1, a2;
 cin >> n1 >> a1 >> n2 >> a2;
 Student s1(n1, a1), s2(n2, a2);
 cout << s1.getName() << " " << s1.getScore() << endl;
 cout << s2.getName() << " " << s2.getScore() << endl;
 return 0;
}
*/

#include <iostream>
#include <string>
using namespace std;

class Student
{
private:
    // 私有成员
    string name;
    double score;
public:
    // 构造函数
    Student(string n, double s)
    {
        name = n;
        score = s;
        cout << name << "'s constructor" << endl;
    }
    
    // 析构函数
    ~Student()
    {
        cout << name << "'s destructor" << endl;
    }

    // 公有成员函数
    string getName()
    {
        return name;
    }
    double getScore()
    {
        return score;
    }

};

int main()
{
 string n1, n2;
 double a1, a2;
 cin >> n1 >> a1 >> n2 >> a2;
 Student s1(n1, a1), s2(n2, a2);
 cout << s1.getName() << " " << s1.getScore() << endl;
 cout << s2.getName() << " " << s2.getScore() << endl;
 return 0;
}

5:构造函数和析构函数-2

描述

定义一个学生类Student,类的成员包括:

1、name:姓名,string类型,私有

2、score:成绩,double类型,私有

3、构造函数Student(string, double):初始化学生的姓名和成绩,并且输出“[name]'s constructor”,其中[name]要用具体的值。

4、析构函数~Student():输出“[name]'s destructor”,其中[name]要用具体的值。

5、string getName():返回姓名,公有

6、double getScore()函数:返回成绩,公有

把上一题主函数中的两个学生改成用学生类的数组定义,主函数略作修改

int main()

{
 string n1, n2;
 double a1, a2;
 cin >> n1 >> a1 >> n2 >> a2;
 //这行改为定义一个学生类的数组s,长度为2
 cout << s[0].getName() << " " << s[0].getScore() << endl;
 cout << s[1].getName() << " " << s[1].getScore() << endl;
 return 0;
}

输入

只有一组案例。字符串n1、浮点数a1、字符串n2、浮点数a2,分别表示第一个学生姓名和成绩、第二个学生姓名和成绩。

输出

[第一个学生的姓名]'s constructor

[第二个学生的姓名]'s constructor

[第一个学生的姓名][空格][第一个学生的成绩]

[第二个学生的姓名][空格][第二个学生的成绩]

[第二个学生的姓名]'s destructor

[第一个学生的姓名]'s destructor

每行输出结果后面都有换行。

样例输入

Tom 80 Jerry 85

样例输出

Tom's constructor
Jerry's constructor
Tom 80
Jerry 85
Jerry's destructor
Tom's destructor

提示说明

提示:假设...代表对象构造函数的参数列表,那么可以用以下不同的方法建立数组

Student s[2]={{...},{...}};

Student s[2]{{...},{...}};

Student s[2]={Student(...),Student(...)};

关键点:

        情况开始失控了。

代码:

/*
定义一个学生类Student,类的成员包括:

1、name:姓名,string类型,私有

2、score:成绩,double类型,私有

3、构造函数Student(string, double):初始化学生的姓名和成绩,并且输出“[name]'s constructor”,其中[name]要用具体的值。

4、析构函数~Student():输出“[name]'s destructor”,其中[name]要用具体的值。

5、string getName():返回姓名,公有

6、double getScore()函数:返回成绩,公有

把上一题主函数中的两个学生改成用学生类的数组定义,主函数略作修改

int main()

{
 string n1, n2;
 double a1, a2;
 cin >> n1 >> a1 >> n2 >> a2;
 //这行改为定义一个学生类的数组s,长度为2
 cout << s[0].getName() << " " << s[0].getScore() << endl;
 cout << s[1].getName() << " " << s[1].getScore() << endl;
 return 0;
}
*/

#include <iostream>
#include <string>
using namespace std;

class Student
{
private:
    //定义私有成员变量
    string name;
    double score;
public:
    //构造函数
    Student(string n, double s)
    {
        name = n;
        score = s;
        cout << name << "'s constructor" << endl;
    }

    //析构函数
    ~Student()
    {
        cout << name << "'s destructor" << endl;
    }

    //公有成员函数
    string getName()
    {
        return name;
    }
    double getScore()
    {
        return score;
    }
};

int main()

{
 string n1, n2;
 double a1, a2;
 cin >> n1 >> a1 >> n2 >> a2;
 //这行改为定义一个学生类的数组s,长度为2
 Student s[2] = {Student(n1, a1), Student(n2, a2)};
 cout << s[0].getName() << " " << s[0].getScore() << endl;
 cout << s[1].getName() << " " << s[1].getScore() << endl;
 return 0;
}

6:构造函数和析构函数-3

描述

定义一个学生类Student,类的成员包括:

1、name:姓名,string类型,私有

2、alias:别名,string类型,私有

3、构造函数Student(string, string):初始化姓名和别名,并且输出“[name]'s constructor”,其中[name]要用具体的值

4、析构函数~Student():输出“[name]'s destructor”,其中[name]要用具体的值

5、void print()函数:输出“[alias] is another name for [name]”,其中[name]和[alias]要用具体的值

规定主函数是如下代码(不可以修改),根据输入输出,设计Student类以满足要求

int main()
{
 string name, alias;
 cin >> name >> alias;
 Student s(name, alias);
 s.print();
 return 0;
}


 

输入

只有一组案例。字符串a、字符串b,分别表示学生的姓名和别名。

输出

[学生的姓名]'s constructor

[学生的别名] is another name for [学生的姓名]

[学生的姓名]'s destructor

每行输出结果后面都有换行。

样例输入

Elizabeth Lisa

样例输出

Elizabeth's constructor
Lisa is another name for Elizabeth
Elizabeth's destructor

关键点:

        情况开始失控了。

代码:

/*
定义一个学生类Student,类的成员包括:

1、name:姓名,string类型,私有

2、alias:别名,string类型,私有

3、构造函数Student(string, string):初始化姓名和别名,并且输出“[name]'s constructor”,其中[name]要用具体的值

4、析构函数~Student():输出“[name]'s destructor”,其中[name]要用具体的值

5、void print()函数:输出“[alias] is another name for [name]”,其中[name]和[alias]要用具体的值

规定主函数是如下代码(不可以修改),根据输入输出,设计Student类以满足要求

int main()
{
 string name, alias;
 cin >> name >> alias;
 Student s(name, alias);
 s.print();
 return 0;
}



*/

#include <iostream>
#include <string>
using namespace std;

class Student
{
private:
    //成员变量
    string name;
    string alias;
public:
    //构造函数
    Student(string name, string alias)
    {
        this->name = name;
        this->alias = alias;
        cout << name << "'s constructor" << endl;
    }

    //析构函数
    ~Student()
    {
        cout << name << "'s destructor" << endl;
    }

    //成员函数
    void print()
    {
        cout << alias << " is another name for " << name << endl;
    }
};

int main()
{
 string name, alias;
 cin >> name >> alias;
 Student s(name, alias);
 s.print();
 return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值