IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 实验二 C++继承 -> 正文阅读

[C++知识库]实验二 C++继承

一. 实验内容

1. 继承访问权限测试

  • 设计类A具有public, protected, private等不同属性的成员函数或变量;
  • 类B通过public, protected, private等不同方式继承A,在类B的成员函数中测试访问A的成员函数或变量;
  • B以private方式继承A,尝试把A中的部分public成员提升为public。

2. 友元类继承测试

  • 设计类A含有私有变量a,在类A中友元给类C;
  • 设计类B继承A,添加私有变量b;在类C中测试访问类B的成员变量a, b;
  • 设计类D继承C,在D的成员函数中测试访问类A的成员变量a,类B的成员变量a, b。

二. 实验过程及分析

访问权限

1.1 访问权限测试代码

// 继承访问权限测试

class A {          // A父类
public:
	int _a;
protected:
	int _b;
private:
	int _c;

};

class Pub_B :public A {   //子类 public继承
public:
	void Test() {
		_a = 10;
		_b = 10;
		//_c = 10; 不可访问
		
	}
	int pub_pub_a1 = 11;
protected:
	int pub_pro_b1 = 12;
private:
	int pub_pri_c1 = 13;

};

class Pro_B :protected A {  //子类 protected继承
public:
	void Test() {
		_a = 15;
		_b = 15;
		//_c = 15;不可访问
	}
	int pro_pub_a2 = 16;
protected:
	int pro_pro_b2 = 17;
private:
	int pro_pri_c2 = 18;
};

class Pri_B :private A {    //子类 private继承
public:
	void Test() {
		_a = 20;
		_b = 20;
		//_c = 20;不可访问
	}
	int pri_pub_a3 = 21;
protected:
	int pri_pro_b3 = 22;
private:
	int pri_pri_c3 = 23;
};

class newPri_B :private A {
public:
	void test() {
		_a = 30;
		_b = 30;
		//_c = 30;
	}
	int pri_pub_a;
	using A::_a;
	using A::_b;
	//using A::_c;
protected:
	int pri_pro_b;
private:
	int pri_pri_c;

};

void test() {
	A a;
	a._a;
	//a._b;
	//a._c;

	Pub_B b1;
	b1._a;
	b1.pub_pub_a1;
	//b1._b;
	//b1._c;
	//b1.pub_pro_b1;
	//b1.pub_pri_c1;

	Pub_B b2;
	b2._a;
	//b2._b;
	//b2._c;
	//b2.pro_pbu_a2;
	//b2.pro_pro_b2;
	//b2.pro_pri_c2;

	Pub_B b3;
	b3._a;
	//b3._b;
	//b3._c;
	//b3.pri_pub_a3;
	//b3.pri_pro_b3;
	//b3.pri_pri_c3;

   class newPri_B b4;
	b4._a;
	b4._b;
	//b4._c;
	b4.pri_pub_a;
	//b4.pri_pro_b;
	//b4.pri_pri_c;
}

1.2 继承访问结果分析

在这里插入图片描述

  1. 子类可以访问父类的public和protected而外部只能访问public,当子类以private继承父类,则从main函数里不能访问任何子类和父类变量,但是可以通过使用using修改基类成员的访问权限。
  2. 如:子类Pri_B私有继承A,所以A中共有成员在子类Pri_B是私有的,它不能被外部访问。但是使用using重新声明后,main()函数中可以使用,如上诉代码中的newPri_B中的{using A::_a ; using A::_b;},现在即可在访问_a和_b,因为_c在A中为private的,所以即便使用了using还是不能访问。

友元继承

2.1 友元类继承测试代码

代码段1class A {          // A父类
public:
	int _a;
protected:
	int _b;
private:
	int _c;
	friend class C;
};

代码段2class B :public A {
public:
	int b1;
protected:
	int b2;
private :
	int b3;

};

代码段3class C {
public:
	void test() {
		B b;
		b.b1;
		//b.b2;
		//b.b3;

		b._a;
		b._b;
		b._c;
	}
};

代码段4class D :public C {
public:
	void test() {
		A a1;
		a1._a;
		//a1._b;
		//a1._c;

		B b2;
		b2._a;
		//b2._b;
		//b2._c;

		b2.b1;
		//b2.b2;
		//b2.b3;
	}
};

2.2 友元测试代码分析

  • 由代码段3可以看出,朋友只可以访问儿子的public级别,不能访问儿子的protected及以下级别,但是可以访问从父类继承过来的所有级别。
  • 由代码段4得知,朋友的儿子不可以访问“我的”及其儿子的protected及以下级别,只能访问public。
  • friend友元,如类C是类A的朋友,类C可以访问类A但是类A不可访问类C,即是友元关系是单向的不具有双向性。
  • 友元关系不能继承。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:39:41  更:2021-10-27 12:40:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:23:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码