C++实验三——类的继承

目录

公有继承

​​​​​​私有继承

保护继承

友元类继承

公有继承

  1. 设计类Base具有public, protected, private等不同属性的成员函数或变量
class Base {
public:
	int a=1;
protected:
	int b=2;
private:
	int c=3;
};

2.使用public继承Base类,子函数在使用public继承Base类时,子函数内部可以访问到protected部分,外部只能访问到public部分(在公有继承中,基类的公有成员和保护成员可被访问且访问属性不变,而私有成员不可以直接访问

class Pub_Base :public Base {
public:
	void Test() {
		a = 1;
		b = 2;	
		/*c=3无法访问*/
	}
	int pub_b1 = 4;

private:
	int pub_b2 = 10;
protected:
	int pub_b3 = 20;
};

结果展示:

说明:Pub_Base在public继承Base类时,只能继承Base的public部分及自己定义的public成员

私有继承

概念:当类的继承方式为私有继承时,基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员不可直接访问

class Pri_Base :private Base {
public:
	void test() {
		a = 1;
		b = 2;
		/*c=3不能访问*/
	}
	int pri_b1 = 6;
protected:
	int pri_b2 = 7;
private:
	int pri_b3 = 8;
};

结果展示:

 结果说明:在私有继承中,基类的公有和保护乘员被继承后都作为派生派的私有成员,派生派的其他成员可以直接访问他们,但是在类族外部通过派生派的对象无法直接访问他们。

保护继承

概念:保护继承中,基类的公有和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员不可直接访问。

class Pro_Base :protected Base {
	public:
		void test() {
			 a = 1;
			b = 2;
			/*c=3无法访问*/
		}
		int pro_b1 = 11;
protected:
	int pro_b2 = 21;
private:
	int pro_b3 = 22;
};

结果展示:

 结果说明:以protected方式继承的外部不能访问到public成员,只能访问到自己定义的public成员

3.B以private方式继承A,尝试把A中的部分public成员提升到public

class NewPrivate_Base :private Base{
public:
	void test() {
		a = 67;
		b = 76;
	}
	int pri_b1 = 100;
	using Base::a;  /*using作用:在子类中引用基类成员,NewPrivate_Base私有继承类Base,所以不能直接访问public成员,用using后可以在main函数中引用public成员a*/
protected:
	int pri_b2 = 200;
private:
	int pri_b3 = 300;
};

 结果说明:使用using后可以在main函数中访问到基类函数的public成员

友元类继承

友元函数可以访问类的私有成员,不需要类的对象去驱动

1.设计类A含有私有变量a,在类A中友元给类C

class A {
public :
	int a = 97;
protected:
	int b = 95;
private:
	int c = 92;
	friend class C;
};

2.设计类B继承A,添加私有变量b;在类C中测试访问类B的成员变量a,b

/*类B继承A*/
class B :public A {
private:
	int b = 94;
};

/*在C中测试访问类B的成员a,b*/
class C {
public :
	void test(){
		B b1;
		b1.a;

		A a1;
		a1.c;    /*因为类A友元给类C,所以在类C中可以访问到A的私有成员变量*/
	}
};

3.设计类D继承C,在类D的成员函数中测试访问类A的成员变量a,类B的成员变量a,b

/*在D中测试类A的成员a,类B的成员a,b*/
class D :public C {
public :
	void test() {
		A a1;
		a1.a;  
		/*友元关系不能被继承,即:朋友可以继承,朋友的儿子则不可以继承*/
		B b1;
		b1.a;
		
	}
};

结果展示:

总结:

公有继承

如果采用公用继承,基类的公有成员和保护成员的访问属性在派生派中不变,而基类的私有成员不可直接访问

私有继承

如果采用私有继承,1.派生派可以访问保护成员。2.外部使用者无法访问保护成员

保护继承

1.受保护成员可以被派生类的成员函数引用。2.所有基类的成员都成为派生类的私有成员或不可直接访问的成员。3.如果进一步派生,基类的全部成员就无法在新的派生中被直接访问

友元类:

1.友元类不能被传递。2.友元关系是单向的,不具有交换性(若B是A的友元,A不一定是B的友元,要看是否有相应声明)3.友元关系不具有传递性

时间有点赶,所以多态性的综合运用得晚几天再学呜呜呜呜~~~~

一、实验目的 掌握根据实际需求设计Java的方法; 掌握Java继承的使用方法; 掌握Javapackage的概念和使用方法; 掌握静态方法的定义和使用方法; 掌握Objectequals方法和toString方法的覆盖方法。 二、实验内容 1、设计一个名为figure的图形软件包(package)。包包含三角形、矩形、圆三个。要求:(1)每个都要构造方法并为成员设置get和set方法;(2)每个都要有计算周长和面积的成员方法;(3)完成该软件包后的编码后,在另一个包的含有main方法的编写代码,分别使用图形软件包的三个,生成三个对象,并打印出其周长和面积。 2、编写Factorial,为其添加两个静态方法(方法名自定义)。其一个使用递归计算n的阶乘,一个使用非递归计算n的阶乘。构造main方法进行测试。 3、按照要求使用Java进行编码。 设计一个教师Teacher,属性有编号(no)、姓名(name)、年龄(age)、所属学院(seminary),为这些属性设置相应的get和set方法; 为Teacher重写equals方法;(当两个教师对象的no相同时返回true) 重写Teacher的toString方法,通过该方法可以返回“编号为**、姓名为**、年龄为**的**学院老师”形式的字符串。 构造main方法进行测试。 4、设计一个带表头的单链表(链表的元素属于同一型对象,但对象的型可以随意),提供以下操作:(1)insert:在某个位置插入对象;(2)delete:在某个位置删除对象;(3)delete:删除链表与x相同的元素;(4)size:返回当前链表对象的个数;(5)isEmpty:判断链表是否为空;(6)traverse:遍历链表,打印出所有的元素;(7)getData:取得某个位置的对象。构造main函数进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值