面向对象程序设计C++课后题答案 下载本文

int st; //ST股票个数 int pt; //PT股票个数 public:

shen_stock(int g,int s,int p);//构造函数

friend void shen_count(const shen_stock es);//计算深圳的股票总数 friend void count(const shang_stock ss,const shen_stock zs); //计算上海和深圳的股票总数 };

shen_stock::shen_stock(int g,int s,int p)//构造函数 { general=g; st=s; pt=p; } main()

{ shang_stock shanghai(1600,20,10);//建立对象

//表示上海有1600支股票,20支ST股票,10支PT股票 shen_stock shenzhen(1500,15,8); //建立对象

//表示深圳有1500支股票,15支ST股票,8支PT股票 shang_count(shanghai);//计算上海的股票总数 shen_count(shenzhen);//计算深圳的股票总数

count(shanghai,shenzhen);//计算上海和深圳的股票总数 return 0; }

void shang_count(const shang_stock ss)//计算上海的股票总数 { int s;

37

cout<<\of shanghai are \}

void shen_count(const shen_stock es)//计算深圳的股票总数 { cout<<\of shanghai are \} void count(const shang_stock ss,const shen_stock es) //计算上海和深圳的股票总数 { int s;

s=es.general+es.st+es.pt+ss.general+ss.st+ss.pt; cout<<\of shanghai and shenzhen \}

38

第五章:继承与派生类

[5_1]答:类的继承方式有public(公有继承)、protected(保护继承)和private(私有继承)3种,不同的继承方式导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。 (1)基类中的私有成员

无论哪种继承方式,基类中的私有成员不允许派生类继承,即在派生类中是不可直接访问的。

(2)基类中的公有成员

当类的继承方式为公有继承时,基类中的所有公有成员在派生类中仍以公有成员的身份出现;当类的继承方式为私有继承时,基类中的所有公有成员在派生类中都以私有成员的身份出现;当类的继承方式为保护继承时,基类中的所有公有成员在派生类中都是以保护成员的身份出现。 (3)基类中的保护成员

当类的继承方式为公有继承时,基类中的所有保护成员在派生类中仍以保护成员的身份出现;当类的继承方式为私有继承时,基类中的所有保护成员在派生类中都是以私有成员的身份出现:当类的继承方式为保护继承时,基类中的所有保护成员在派生类中仍以保护成员的身份出现。

[5_2]答:派生类不能直接访问基类的私有成员,但是可以通过基类提供的公有 成员函数间接地访问基类的私有成员

[5_3]答:保护成员可以被派生类的成员函数访问,但是对于外界是隐藏起来的,外部函数不能访问它。因此,为了便于派生类的访问,可以将基类私有成员中需要提供给派生类访问的成员定义为保护成员。C++规定,派生类对于保护成员的继承与公有成员的继承很相似,也分为两种情况:若为公有派生,则基类中的保

39

护成员在派生类中也为保护成员;若为私有派生,则基类中的保护成员在派生类中成为私有成员。

[5_4]答:通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数;当撤消派生类对象时,则先执行派生类的析构函数函数,随后再执行基类的析构函数。

[5_5]答:当基类的构造函数没有参数或没有显示定义构造函数时,派生类可以 不向基类传递参数,甚至可以不定义构造函数。当基类含有带参数的构造函数时,派生类必须定义构造函数,以提供把参数传递给基类构造函数的途径。 派生类构造函数的一般格式如下:

派生类构造函数名(参数表):基类构造函数名(参数表) { }

其中基类构造函数的参数,通常来源于派生类构造函数的参数表,也可以用常数值。由于析构函数是不带参数的,在派生类中是否定义析构函数与它所属的基类无关,基类的析构函数不会因为派生类没有析构函数而得不到执行,它们各自是独立的。

[5_6]答:当一个派生类具有多个基类时,这种派生方法称为多继承。多继承构造函数的执行顺序与单继承构造函数的执行顺序相同,也是遵循先执行基类的构造函数,再执行对象成员的构造函数,最后执行派生类构造函数的原则。在多个基类之间则严格按照派生类声明时从左到右的顺序来排列先后。而析构函数的执行顺序刚好与构造函数的执行顺序相反。

[5_7]在类的派生中为何要引入虚基类?虚基类构造函数的调用顺序是如何规定的?

当引用派生类的成员时,首先在派生类自身的作用域中寻找这个成员,如果没有找到,则到它的基类中寻找。如果一个派生类是从多个基类派生来的,而这些基

40