当前位置: 首页 > news >正文

西南科技大学C++程序设计实验六( 继承与派生一)

一、实验目的

1. 理解不同继承属性对派生类访问基类成员的区别

2. 掌握单继承程序编写

二、实验任务

1、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因(该题中A为基类,B为派生类,Bpublic方式继承A

重点:理解不同继承方式数据的访问权限,派生类对象的使用。

#include<iostream>

using namespace std;

class A//基类

{

private:

    int a;

public:

    void seta(int i)

    {

        a=i;

    }

    int geta(){return a;}

};

class B:public A //派生类B公有继承基类A

{

private:

    int b;

public:

    void setb(int i){b=i;}

    int getb(){return b;}

    void show(){cout<<"A::a="<<a<<endl;}//思考1:派生类B中的函数是否可以直接访问从基类继承过来的私有数据成员?

不可以直接访问,因为无论用何种方式继承,从基类继承过来的私有数据成员都是不可访问的,只有基类本身可以访问其私有成员,但是可以通过在基类中提供访问函数来进行访问。

};

int main()

{

    B bb;//思考2:对象bb的数据成员有几个?初始化值是什么?

bb中有2个数据成员,一个是从基类继承下来的私有数据成员,一个是派生类B自己定义的私有数据成员。初始化值不确定,因为没有提供构造函数进行初始化。

    bb.seta(6);

    bb.setb(3);

    bb.show();

    cout<<"A::a="<<bb.a<<endl;//思考3:派生类对象是否可以访问基类私有数据成员?如果不可以,如何修改?

不可以。可以通过在基类中提供访问函数来进行访问,即通过基类公有成员函数进行间接访问。

    cout<<"B::b="<<bb.b<<endl;//思考4:类外对象是否可以访问私有数据成员?如果不可以,如何修改?

类外对象不可以访问私有数据成员,可以通过基类公有成员函数进行间接访问。

    cout<<"A::a="<<bb.geta()<<endl;

    cout<<"B::b="<<bb.getb()<<endl;

    return 0;

}

实验思考与结果分析:

(1)不可以直接访问,因为无论用何种方式继承,从基类继承过来的私有数据成员都是不可访问的,只有基类本身可以访问其私有成员,但是可以通过在基类中提供访问函数来进行访问。

(2)bb中有2个数据成员,一个是从基类继承下来的私有数据成员,一个是派生类B自己定义的私有数据成员。初始化值不确定,因为没有提供构造函数进行初始化。

(3)不可以。可以通过在基类中提供访问函数来进行访问,即通过基类公有成员函数进行间接访问。

(4)类外对象不可以访问私有数据成员,可以通过基类公有成员函数进行间接访问。

修改后的程序代码:

7

运行结果:

2、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因(该题中A为基类,B为派生类,Bprivate方式继承A

#include<iostream>

using namespace std;

class A //基类

{

private:

    int a;

public:

    void seta(int i)

    {

        a=i;

    }

    int geta(){return a;}

};

class B:private//派生类B私有继承基类A

{

private:

    int b;

public:

    void setb(int i){b=i;}

    int getb(){return b;}

void show_0(){cout<<"A::a="<<a<<endl;}//思考1:派生类B中的函数是否可以直接访问从基类私有继承过来的私有数据成员?

派生类B中的函数不能直接访问从基类私有继承过来的私有数据成员,因为这些成员在派生类中是不可见的。

    void show(){cout<<"A::a="<<geta()<<endl;}//思考2:派生类B中的函数是否可以直接访问从基类私有继承过来的成员函数?

};

派生类B中的函数不能直接访问从基类私有继承过来的成员函数,因为这些函数在派生类中是不可见的。

int main()

{

    B bb;//思考3:对象bb的数据成员有几个?初始化值是什么?

对象bb的数据成员有两个,分别是ba,但是a是以private方式继承到派生类B中的,因此在派生类

http://www.lryc.cn/news/253730.html

相关文章:

  • MySQL 性能优化
  • 求职招聘小程序源码系统 全开源源代码:找工作+招人才 平台级别运营版 附带完整的搭建教程
  • 26、卷积 - 实际上是一个特征提取器
  • web前端之vue3
  • 原来在C++的类中声明函数时可以不写参数名只写参数类型
  • 独孤思维:这里有蓝海项目,你要吗?
  • 外卖平台推荐算法的优化与实践
  • CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION
  • HarmonyOS应用开发——页面
  • Java流Stream使用详解(练习)
  • 请介绍一下MySQL的存储引擎及其特点
  • Python---魔术方法
  • 手把手教你注册意大利商标
  • pandas详细笔记
  • win11安装(未完待续)
  • python之记录程序运行时长工具
  • .Net core 6.0 升8.0
  • MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!
  • 【EtherCAT详解】基于Wireshark的EtherCAT帧结构解析
  • C语言之程序的组成和元素格式
  • HalconDotNet.HTupleAccessException:Index out of range
  • Delphi-线程
  • WeakMap
  • 获取网络ppt资源
  • 从0到1构建智能分布式大数据爬虫系统
  • C语言速通笔记(41-62)
  • Python 调用企业微信群机器人发送消息及文件
  • 数据结构:链表应用:第6关:链表的分解
  • 10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)
  • 中小企业:理解CRM与ERP系统的区别与联系,提升业务效能