1.阅读下面程序,分析其执行过程,写出输出结果。
参考代码一
#include <iostream>
using namespace std;
class Date {
public:
Date(int, int, int);
Date(int, int);
Date(int);
Date( );
void display( );
private:
int month;
int day;
int year;
};
Date::Date(int m, int d, int y): month(m), day(d), year(y) { }
Date::Date(int m, int d): month(m), day(d) { year = 2005; }
Date::Date(int m): month(m) {
day = 1;
year = 2005;
}
Date::Date( ) {
month = 1;
day = 1;
year = 2005;
}
void Date::display() {
cout << month << "/" << day << "/" << year << endl;
}
int main() {
Date d1(10, 13, 2005);
Date d2(12, 30);
Date d3(10);
Date d4;
d1.display();
d2.display();
d3.display();
d4.display();
return 0;
}
二.创建一个学生类,该类有姓名、学号、语文成绩数据成员。构造函数初始化每一个数据成员,成员函数changeValue是改变该学生的语文成绩,然后利用display将数据输出出来。
程序要求:
(1)对构造函数进行重载
(2)建立作用域不同的类对象,查看其析构函数的析构顺序。
参考代码二
#include <iostream>
#include <string>
using namespace std;
class Student {
public:
// 构造函数重载
Student() : name(""), id(0), chinese_score(0) {}
Student(string n, int i, double c) : name(n), id(i), chinese_score(c) {}
// 改变语文成绩
void changeValue(double new_score) {
chinese_score = new_score;
}
// 输出学生信息
void display() {
cout << "姓名:" << name << ",学号:" << id << ",语文成绩:" << chinese_score << endl;
}
~Student() {
cout << "学生:" << name << "析构" << endl;
}
private:
string name;
int id;
double chinese_score;
};
int main() {
{
Student stu1("张三", 1001, 89.5);
stu1.display();
stu1.changeValue(90.5);
stu1.display();
}
{
Student stu2("李四", 1002, 88.5);
stu2.display();
stu2.changeValue(92.5);
stu2.display();
}
return 0;
}
代码解析二
这个程序首先定义了一个名为Student的类,包含姓名、学号和语文成绩三个私有数据成员,以及一个改变语文成绩的公有成员函数。 Student类的构造函数被重载,可以接受零个参数(默认构造函数),或三个参数(带有姓名、学号和语文成绩的构造函数)。
在main函数中,我们在两个不同的作用域内创建了两个Student类对象,即stu1和stu2。 这两个对象有不同的生命周期,它们的析构函数将在它们各自的作用域结束时被调用。注意,析构函数的调用顺序总是与构造函数的调用顺序相反,也就是说,最后创建的对象将首先被析构。
三.商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。现已知当天3名销货员的销售情况为:
销货员号(num) 销货件数(quantity) 销货单价(price)
101 5 23.5
102 12 24.56
103 100 21.5
请编程序,计算出当日此商品的总销售款sum,以及每件商品的平均售价。要求用静态数据成员和静态成员函数。
(提示: 将折扣discount、总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和display(输出结果)。
参考代码三
#include <iostream>
using namespace std;
class Salesman {
public:
Salesman(int num, int quantity, double price)
: num(num), quantity(quantity), price(price) {
n += quantity;
if (quantity >= 10) {
sum += quantity * price * discount * 0.98;
} else {
sum += quantity * price * discount;
}
}
// 计算平均售价
static double average() {
return sum / n;
}
// 输出结果
static void display() {
cout << "总销售款:" << sum << "元,平均售价:" << average() << "元/件" << endl;
}
private:
int num;
int quantity;
double price;
static double discount; // 折扣
static double sum; // 总销售款
static int n; // 商品销售总件数
};
// 静态成员数据初始化
double Salesman::discount = 1.0;
double Salesman::sum = 0.0;
int Salesman::n = 0;
int main() {
Salesman s1(101, 5, 23.5);
Salesman s2(102, 12, 24.56);
Salesman s3(103, 100, 21.5);
Salesman::display();
return 0;
}
代码解析三
在上面的程序中,首先定义了一个名为Salesman的类,包含销售员号,销售件数和销售单价的数据成员,以及计算平均售价和输出结果的静态成员函数。注意,每次创建Salesman类的新对象时,总销售款和商品销售总件数都会根据新对象的销售情况进行更新。
然后在main函数中,我们创建了三个Salesman类的对象,即s1,s2和s3,分别代表三名销售员的销售情况。最后,我们调用静态成员函数Salesman::display()输出当日的总销售款和每件商品的平均售价。
这一切,似未曾拥有