第五章 静态成员与友元
一、填空题
1、一个类的头文件如下所示,num初始化值为5,程序产生对象T,且修改num为10,并使用show()函数输出num的值10。
#include
class Test
{ private:
static int num;
public:
Test(int);
void show();
};
_int num=5;________
Test::Test(int n)
{ num=n; }
void Test::show()
{ cout< void main() { Test t(10); ___t.show();______ } 2 、在下面程序的底画线处填上适当的字句,使该程序执行结果为40。 #include class Test { public: ___static int x___; Test (int i=0) {x=i+x;} int Getnum() {return Test::x+7;} }; ___int Test::x = 33____; void main() {Test test; cout< } 3 、下列程序运行的结果是_ 姓名 成绩 等级 张三 78 中 李四 92 优 王五 62 及格 孙六 88 良 _ #include #include #include class student {char name[8]; int deg; char level[7]; friend class process; // 说明友元类 public: student(char na[],int d) { strcpy(name,na); deg=d; } }; class process { public: void trans(student &s) {int i=s.deg/10; switch(i) {case 9: strcpy(s.level, "优");break; case 8: strcpy(s.level,"良");break; case 7: strcpy(s.level,"中");break; case 6: strcpy(s.level,"及格");break; default: strcpy(s.level,"不及格"); } } void show(student &s) {cout< }; void main() { student st[]={student("张三",78),student("李四",92),student("王五 ",62),student("孙六",88)}; process p; cout<<"结 果:"<<"姓名"< for(int i=0;i<4;i++) { p.trans(st[i]); p.show(st[i]);} } 二、编程题 1. (1) 编写一个类,声明一个数据成员和一个静态数据成员。让构造函数初始化数据成员,并把静态数据成员加1,让析构函数把静态数据成员减1。 (2) 根据(1)编写一个应用程序,创建三个对象,然后显示它们的数据成员和静态数据成员,再析构每个对象,并显示它们对静态数据成员的影响。 (3) 修改(2),让静态成员函数访问静态数据成员,并让静态数据成员是保户的。 2. (1) 下述代码有何错误,改正它。 #include < iostream> using namespace std; class Animal; void SetValue(Animal&, int); void SetValue(Animal&, int, int); class Animal { public: friend void SetValue(Animal&, int); protected: int itsWeight; int itsAge; }; void SetValue(Animal& ta, int tw) { a.itsWeight = tw; } void SetValue(Animal& ta, int tw, int tn) { ta.itsWeight = tw; ta.itsAge = tn; } int main() { Animal peppy; SetValue(peppy, 5); SetValue(peppy, 7,9); return 0; } (2) 将上面程序中的友员改成普通函数,为此增加访问类中保护数据的成员函数。 答: (1)void SetValue(Animal& ta, int tw, int tn)无法访问类中被保护的成员 改:在类中加上friend void SetValue(Animal& ta, int tw, int tn) (2) void AnimalSetValue(Animal& ta, int tw) { } 3. 重新编写下述程序,使函数Leisure()成为类Car和类Boat的函数。作为重新编程,在类Car和类Boat中,增加函数set()。 #include < iostream> using namespace std; class Boat; class Car { public: Car(int j){size = j;} friend int Leisure(int time, Car& aobj, Boat& bobi); protected: int size; class Boat { public: Boat(int j){size = j;} friend int Leisure(int time, Car& aobj, Boat& bobj); protected: int size; }; int Leisure(int time, Car& aobj, Boat& bobi) { return time * aobj.size *bobi.size; } }; int main() { Car c1(2); Boat bl(3); int time = 4; cout << Leisure(time, cl,bl); return 0; }
ta.itsWeight = tw;
#include