【题目一】
【实验代码】
#include<iostream>
using namespace std;
class Sale{
public:
Sale(int n, int q, double price): num(n), qua(q), price(price){};
static void saleSum(Sale* s);
static double average();
static void display();
private:
int num;
int qua;
double price;
static double discount;
static double sum;
static int cnt;
};
double Sale::discount = 0.98;
double Sale::sum = 0;
int Sale::cnt = 0;
double ave = 0;
void Sale::saleSum(Sale s[3]){
for (int i = 0; i < 3; i++) {
if (s[i].qua < 10) sum += s[i].price * s[i].qua;
else sum += discount * s[i].price * s[i].qua;
cnt += s[i].qua;
}
}
double Sale::average() {
ave = sum / cnt;
return ave;
}
void Sale::display() {
cout<<"总销售款为:"<<sum<<endl;
cout<<"平均售价为:"<<ave<<endl;
}
int main() {
Sale sale1(101, 5, 23.5);
Sale sale2(102, 12, 24.5);
Sale sale3(103, 100, 21.5);
Sale s[3] = {sale1, sale2, sale3};
Sale::saleSum(s);
Sale::average();
Sale::display();
return 0;
}
【实验结果截图】
【题目二】
将9.13程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。
【实验代码】
#include<iostream>
using namespace std;
class Date;
class Time
{
public:
Time(int, int, int);
friend void display(Date&d,Time&t);
private:
int hour;
int minute;
int sec;
};
class Date {
public:
Date(int, int, int);
friend void display(Date& d, Time& t);
private:
int month;
int day;
int year;
};
Time::Time(int h, int m, int s)
{
hour = h;
minute = m;
sec = s;
}
Date::Date(int m, int d, int y)
{
month = m;
day = d;
year = y;
}
void display(Date& d, Time& t)
{
cout << d.month << "/" << d.day << "/" << d.year << endl;
cout << t.hour << ":" << t.minute << ":" << t.sec << endl;
}
int main()
{
Time t1(10, 13, 56);
Date d1(12, 25, 2004);
display(d1,t1);
return 0;
}
【实验结果截图】
【题目三】
将例9.13中的Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年、月、日和时、分、秒。
【实验代码】
#include<iostream>
using namespace std;
class Date;
class Time
{
public:
Time(int, int, int);
void display(Date&d);
private:
int hour;
int minute;
int sec;
};
class Date
{
public:
friend Time;
Date(int, int, int);
private:
int day;
int month;
int year;
};
Time::Time(int h, int m, int s)
{
hour = h;
minute = m;
sec = s;
}
Date::Date(int y, int m, int d)
{
year = y;
month = m;
day = d;
}
void Time::display(Date&d)
{
cout << d.year << "/" << d.month << "/" << d.day << endl;
cout << hour << ":" << minute << ":" << sec << endl;
}
int main()
{
Time t1(10, 13, 56);
Date d1(2004,12, 25);
t1.display(d1);
return 0;
}
【实验结果截图】
来自 CUST 2021届