C++继承

1.什么是继承?

继承是一种面向对象编程的重要特性,它允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和行为。通过继承,子类可以重用基类的成员,并且可以添加自己的新成员或修改继承的成员。

2.继承的作用是什么?

继承和派生,它建立一种is-a(subsumption,包含架构指的是类的父子继承关系)关系,即派生类对象也是一个基类对象,对基类对象执行的操作,也可以对派生类对象执行。

当从现有类中派生出新类时,派生类可以有以下几种变化:

(1)增加新的数据成员;

(2)增加新的成员函数;

(3)重新定义已有成员函数

继承还可以建立类之间的层次关系,形成逻辑和现实世界对象之间的关系模型。

3.继承的方式有哪些?

C++中有三种继承方式:

(1)public:公有继承,父类的成员是什么就是什么

(2)protected:保护继承,继承下来一般就变成了保护的成员

(3)private:私有继承,继承下来就是私有成员

4.各种继承方式子类对父类的访问权限是什么?

(1)公有继承

使用最多的继承方式,父类中的私有不能在子类中访问,公有还是公有,保护还是保护

class A//父类
{
public:
	void show1()
	{
		cout << "A::show1(),公有方法" << endl;
	}
protected:
	void show2()
	{
		cout << "A::show2(),保护方法" << endl;
	}
private:
	void show3()
	{
		cout << "A::show3(),私有方法" << endl;
	}
public:
	int m_a = 0;
protected:
	int m_b = 1;
private:
	int m_c = 2;
};
class B :public A//子类
{
public:
	void show()
	{
		show1();//可以,继承下来是public,可以在类外访问
		show2();//可以,继承下来是protected,不可以在类外访问
		//show3();//私有属性,不能访问
		cout << m_a << endl;//可以,继承下来是public,可以在类外访问
		cout << m_b << endl;//可以,继承下来是protected,不可以在类外访问
		//cout << m_c << endl;//私有属性,不能访问
	}
};
int main()
{
	B b1;
	b1.show1();//public可以在类外访问
	//b1.show2();//protected不能在类外访问

	b1.m_a = 100;//public可以在类外访问
	//b1.m_b = 200;//protected不能在类外访问

	b1.show();//public可以在类外访问
	return 0;
}

运行结果如上图所示。(后面两个一样)

A作为父类,其中的公有,保护属性的方法在子类B中都可以被访问,但是A中的私有属性的方法在子类B中不能被访问。

B中的show1是公有的,在类外也可以被访问,B中的show2是保护类,在类外不能被访问

A中公有,保护属性的数据成员在子类B中都能被访问,但私有属性的数据成员m_c在子类中不能被访问

在子类B中,m_a是公有的,那么在类外也能被访问,但m_b是保护属性,在类外就不能被访问

(2)保护继承

父类中的私有不能在子类中访问,公有变保护,保护还是保护

class A//父类
{
public:
	void show1()
	{
		cout << "A::show1(),公有方法" << endl;
	}
protected:
	void show2()
	{
		cout << "A::show2(),保护方法" << endl;
	}
private:
	void show3()
	{
		cout << "A::show3(),私有方法" << endl;
	}
public:
	int m_a = 0;
protected:
	int m_b = 1;
private:
	int m_c = 2;
};
class B :protected A//子类
{
public:
	void show()
	{
		show1();//可以,继承下来是protected,不可以在类外访问
		show2();//可以,继承下来是protected,不可以在类外访问
		//show3();//私有属性,不能访问
		cout << m_a << endl;//可以,继承下来是protected,不可以在类外访问
		cout << m_b << endl;//可以,继承下来是protected,不可以在类外访问
		//cout << m_c << endl;//私有属性,不能访问
	}
};
int main()
{
	B b1;
	//b1.show1();//protected不能在类外访问
	//b1.show2();//protected不能在类外访问

	//b1.m_a = 100;//protected不能在类外访问
	//b1.m_b = 200;//protected不能在类外访问

	b1.show();//public可以在类外访问
	return 0;
}

(3)私有继承

父类的私有在子类中不能访问,公有变私有,保护变私有

class A//父类
{
public:
	void show1()
	{
		cout << "A::show1(),公有方法" << endl;
	}
protected:
	void show2()
	{
		cout << "A::show2(),保护方法" << endl;
	}
private:
	void show3()
	{
		cout << "A::show3(),私有方法" << endl;
	}
public:
	int m_a = 0;
protected:
	int m_b = 1;
private:
	int m_c = 2;
};
class B :private A//子类
{
public:
	void show()
	{
		show1();//可以,继承下来是private,不可以在类外访问
		show2();//可以,继承下来是private,不可以在类外访问
		//show3();//私有属性,不能访问
		cout << m_a << endl;//可以,继承下来是private,不可以在类外访问
		cout << m_b << endl;//可以,继承下来是private,不可以在类外访问
		//cout << m_c << endl;//私有属性,不能访问
	}
};
int main()
{
	B b1;
	//b1.show1();//private不能在类外访问
	//b1.show2();//private不能在类外访问

	//b1.m_a = 100;//private不能在类外访问
	//b1.m_b = 200;//private不能在类外访问

	b1.show();//public可以在类外访问
	return 0;
}

综上所述:1.父类中private成员不能被子类访问

                  2.继承方式和访问属性不同时,按照权限小的合并。(比如,public和protected合并成                       protected)

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值