云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > C++继承与派生

C++继承与派生

  • 62 次阅读
  • 3 次下载
  • 2025/5/2 8:07:29

第4章继承与派生

一、简答题

1. 有以下程序结构,请分析访问属性。

class A //A为基类 {public:

void func1( ); int i; protected:

void func2( ); int j; private:

int k; } ;

class B: public A //B为A的公用派生类 {public :

void func3( ) ; protected: int m; private :

int n; };

class C: public B // C为B的公用派生类 {public:

void func4( ); private:

int p; };

int main( )

{ A a; //a是基类A的对象 B b; //b是派生类B的对象

C c; //c是派生类C的对象 return 0; }

问:

(1)在main函数中能否用b.i,b.j 和b.k 访问派生类B对象b中基类A的成员? (2)派生类B中的成员函数能否调用基类A中的成员函数func1和func2? (3)派生类B中的成员函数能否访问基类A中的数据成员i,j,k?

(4)能否在main函数中用c.i,c.j,c.k,c.m,c.n,c.p访问基类A的成员i,j,k,派生类B的成员m,n,以及派生类C的成员p?

(5)能否在main函数中用c. func1( ),c. func2( ),c. func3( )和c. func4( )调用func1,func2,func3,func4成员函数?

(6)派生类C的成员函数func4能否调用基类A中的成员函数func1,func2和派生类B中的成员函数func3?

【答案要点】各成员在各类的范围内的访问权限如下表:

类的范围 基类A 公用派生类B 公用派生类C func1 公用 公用 公用 i 公用 公用 公用 func2 保护 保护 保护 j 保护 保护 保护 k 私有 不可访问 不可访问 func3 公用 公用 m 保护 保护 n 私有 不可访问 func4 公用 p 私有 (1)在main 函数中能用b.i访问派生类B对象b中基类A的成员i,因为它在派生类B中是公用数据成员。

不能用b.j访问派生类B对象b中基类A的成员j,因为它在派生类B中是保护数据成员,不能被类外访问。

不能用b.k访问派生类B对象b中基类A的成员k,因为它是基类A的私用数据成员,只有基类A的成员函数可以访问,不能被类外访问。

(2)派生类B中的成员函数能调用基类A中的成员函数func1和func2,因为func1、func2在派生类B中是公用成员和保护成员,可以被派生类的成员函数访问。

(3)派生类B中的成员函数能访问基类A中的数据成员i、j,因为i、j在派生类B中是公用成员和保护成员,可以被派生类的成员函数访问。

派生类B中的成员函数不能访问基类A中的数据成员k,因为它在派生类B中是不可访问的成员。

(4)能在main 函数中用c.i访问基类A的成员i,不能用c.j、c.k访问基类A的成员j、k,因为它们在派生类C中是保护成员和私有成员,不能被类外访问。也不能用c.m、c.n访问派生类B的成员m、n,因为它们在派生类C中也是保护成员和私有成员,不能被类外访问。也不能用c.p访问派生类C中的私用成员p。

(5)能在main函数中用c.func1()、c. func3()和c. func4()调用func1、func3、func4成员函数,因为它们在派生类C中是公用成员函数,可以在类外被访问。

不能在main函数中用c.func2()调用func2成员函数,因为它在派生类C中是保护成员函数,不能在类外被访问。

(6)派生类C的成员函数func4能调用基类A中的成员函数func1、func2和派生类中的成员函数func3,因为func1、func3在派生类C中是公用成员函数,func2在派生类C中是保护成员函数,都可以被派生类C的成员函数调用。

2. 已给商品类及其多层的派生类。以商品类为基类。第一层派生出服装类、家电类、车辆类。第二层派生出衬衣类、外衣类、帽子类、鞋子类;空调类、电视类、音响类;自行车类、轿车类、摩托车类。请给出商品类及其多层派生类的基本属性和派生过程中增加的属性。

【答案要点】

按题意没有操作,所以只列出各个类的数据成员,也不再在main函数中对各类进行测试。

#include using namespace std; class Commodity{

double price; //价格 char name[20]; //商品名 char manufacturer[20]; //生产厂家 int items; //数量 };

class Clothing:public Commodity{ //服装类

char texture[20]; //材料质地 };

class ElectricAppliance:public Commodity{ //家电类

enum {Black,White}type; //黑白家电 };

class Vehicle:public Commodity{ //车辆类

int wheelNum; //车轮数量 };

class Shirt:public Clothing{ //衬衣类

enum {Formal,Casual}style; //式样:正式、休闲 };

class Garment:public Clothing{//外衣类

enum {Jacket,Coat}style;//式样:夹克、外套 };

class Hat:public Clothing{//帽子类

enum {Winter,Summer,Spring,Autumn}style;//季节风格 };

class Shoes:public Clothing{//鞋子类

enum {Winter,Summer,Spring,Autumn}style;//季节风格 };

class AirCondition:public ElectricAppliance{//空调

bool warmCool; //是否冷暖 float power; //功率 };

class Television:public ElectricAppliance{//电视类

int size; //尺寸

bool isColor; //是否彩色 };

class Acoustics:public ElectricAppliance{//音响类

int speakerNum; //喇叭数目 float power; //功率 };

class Bicycle:public Vehicle{//自行车类

int speedGrades; //调速级数 int wheelSize; //轮子大小 };

class Car:public Vehicle{//轿车类

float volume; //排气量

bool isSkyLight; //是否有天窗 int boxNum; //厢数 };

class Motorcycle:public Vehicle{//摩托车类

float volume; //排气量 };

int main(){ return0; }

二、编程题

1.定义一个国家基类Country,包含国名、首都、人口等属性,派生出省类Province,增加省会城市、人口数量属性。 【程序参考代码】

#include using namespace std;

#include class Country {public:

Country(char *n,char *c,double p)

{ strcpy(name,n); strcpy(capital,c); population=p; }

void print(){ cout<

char name[10],capital[50]; double population; };

class Province:private Country {public:

Province(char *n,char *c,double p,char *cc,double pp):Country(n,c,p) { strcpy(provinceCapital,cc); provincePopulation=pp; } void display() { print();

cout<

private:

char provinceCapital[50]; double provincePopulation; };

int main() {

Province p(\ p.display(); return 0; }

2.定义一个基类——Person类,有姓名、性别、年龄,再由基类派生出学生类——Student类和教师类——Teacher类,学生类增加学号、班级、专业和入学成绩,教师类增加工号、职称和工资。 【程序参考代码】

#include #include using namespace std;

class Person //声明公共基类Person {public:

void set(){ cin >>name>>sex>>age; } //姓名、性别、年龄的输入

void display(){ cout<<\

//姓名、性别、年龄的显示

private:

string name; //姓名 char sex; //性别 int age;//年龄 };

class Student: public Person //声明Student类为Person类的公用派生类 {public:

void input() { Person::set();//姓名、性别、年龄的输入

搜索更多关于: C++继承与派生 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

第4章继承与派生 一、简答题 1. 有以下程序结构,请分析访问属性。 class A //A为基类 {public: void func1( ); int i; protected: void func2( ); int j; private: int k; } ; class B: public A //B为A的公用派生类 {public : void func3( ) ; protected: int m; private : int n; }; class C: public B // C为B的公用派生类 {public: void func4(

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com