实验六-对象传递与静态成员参考答案

更新时间:2024-05-04 20:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验六 对象传递与静态成员

6.1 实验目的

1.理解静态成员(静态数据成员、静态成员函数)的作用与使用; 2.理解友元(友元函数、友元类)的作用与使用; 3.理解以常数据成员、常对象。

6.2 实验内容 6.2.1程序阅读

1.理解下面的程序,并运行查看结果,回答程序后面的问题。

#include #include using namespace std; class CStudent {

public:

CStudent(char *n, int a); ~CStudent();

staticvoid SetAge(int age); private:

char *name; int age;

staticint nTotalObj; };

int CStudent::nTotalObj = 0;

CStudent::CStudent(char *n, int a):age(a) {

int nLen = strlen(n);

name = newchar[nLen+1]; strcpy(name,n); name[nLen] = '\\0'; nTotalObj++; }

CStudent::~CStudent() {

delete[] name; nTotalObj--; }

void CStudent::SetAge(int age) {

this->age = age; }

int main() {

CStudent stu1(\张三\,25); CStudent str2(\李四\,26);

cout<<\<

return 0; }

问题一:以上程序编译能通过吗,为什么? 答:不能,存在以下错误

a、 静态成员变量nTotalObj声明为private,导致在主函数内不能引用; b、 静态成员函数使用了this指针。

问题二:成员变量nTotalObj在程序中起什么作用,它是如何实现的? 答:对构建的CStudent类对象进行计数的作用,它是通过设置静态成员变量的方式实现的。 问题三:如果规定该程序的主函数不允许改变,应该如何改正该程序?

答:将静态成员变量nTotalObj声明为public,将语句this->age=age;修改为age=age; 2.理解下面的程序,并运行查看结果,回答程序后面的问题。

#include #include using namespace std; class CStudent; class CTeacher {

public:

CTeacher(char *tn, int ta); ~CTeacher();

void SetStuAge(CStudent &, int a); void display() { cout<

char *name; int age; };

class CStudent

{

public:

CStudent(char *n, int a); ~CStudent(); void display() { cout<

friend void CTeacher::SetStuAge(CStudent &, int a); private:

char *name; int age; };

CStudent::CStudent(char *n, int a):age(a) {

int nLen = strlen(n);

name = new char[nLen+1]; strcpy(name,n); name[nLen] = '\\0'; }

CStudent::~CStudent() {

delete[] name; }

CTeacher::CTeacher(char *tn, int ta):age(ta) {

int nLen = strlen(tn);

name = new char[nLen+1]; strcpy(name,tn); name[nLen] = '\\0'; }

CTeacher::~CTeacher() {

delete[] name; }

void CTeacher::SetStuAge(CStudent &s, int a) {

s.age = a; }

int main() {

}

CStudent stu(\张三\CTeacher tea(\李四\stu.display(); tea.display();

tea.SetStuAge(stu,23); stu.display(); return 0;

问题一:以上程序有三处错误,试指出来,并改正之?

答:这个程序想要实现的一个核心功能是:教师可以通过SetStuAge方法来修改学生的年龄。这样就需要在学生类中声明CTeacher类的void SetStuAge函数为CStudent类的友元函数。此题很多同学修改后,程序能运行,但并不能实现上述功能。 此题修改的内容已经在程序中用红色标出。

3.理解下面的程序,并运行查看结果,回答程序后面的问题。

#include using namespace std; class Date {

private:

const int year; const int month; const int day; public:

Date(int y,int m,int d); void showdate(); };

Date::Date(int y,int m,int d) {

year = y; month = m; day = d; }

void Date::showdate() {

cout<

int main() {

const Date obj(2007,10,30); obj.showdate(); return }

问题一:以上程序有两大错误,试指出来,并改正之(要求主函数和类Date的数据成员属性不可以改动)?(提示:常数据成员的初始化、常对象的使用)

答:

1、常成员变量的初始化只能采取参数初始化表方式;

Date类的构造函数应改为Date::Date(int y,int m,int d):year(y),month(m),day(d){}

2、常对象只能调用常成员函数,因此showdate需要定义为常成员函数,函数声明与定义后需要添加const关键字。修改后的程序如下。

#include using namespace std; class Date {

private:

const int year; const int month; const int day; public:

Date(int y,int m,int d); void showdate() const; };

Date::Date(int y,int m,int d):year(y),month(m),day(d){}

void Date::showdate() const {

cout<

int main() {

const Date obj(2007,10,30); obj.showdate(); return }

6.2.2 程序设计

1.商店销售某一商品,商店每天公布统一的折扣(discount).同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对于一次购10件以上的客户,还可以享受9.8折优惠.现已知当天3名销售人员的销售情况为:

销售员号(num) 销售件数(quantity)单价(price) 101 5 23.5 102 12 24.56 103 100 21.5

编写程序,计算出当日此商品的总销售款sum,以及每件商品的平均售价.要求用静态数据成员和静态成员函数.

答:此题是书上习题9,主要用来考察大家对静态成员的理解,当时摘抄下来没有细想,现

本文来源:https://www.bwwdw.com/article/j1dg.html

Top