c++ &继承和多态(一)

本文介绍了C++中的继承机制,包括公有、私有和保护继承,以及它们如何影响类之间的关系和访问权限。通过一个示例展示了类的内存分布,并探讨了多态性,包括编译时和运行时的多态。此外,还讨论了单一继承和多重继承的概念。
摘要由CSDN通过智能技术生成

继承机制是面向对象程序设计使代码可以复用的最重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类称为派生类。
继承呈现了面向对象程序设计的层次结构,体现了由简单都复杂的认识过程

多态性是考虑在不同层次的类中,以及在同一类中,同名的成员函数之间的关系问题。函数的重载,运算符的重载,属于编译时的多态性。以虚基类为基础的运行时的多态性是面向对象程序设计的标志性特征。体现了类推和比喻的思想方法。

c++通过类派生的机制来支持继承。被继承的类称为基类超类,新产生的类为派生类子类。

基类和派生类的集合称为类继承层次结构

如果基类和派生类共享相同的公有接口,则派生类被称作基类的子类型。

派生反映了事务之间的联系,事务的共性与个性之间的关系。派生与独立设计若干相关的类,前者工作量少,独立的部分可以从基类继承来,不需要单独编程。

如果一个派生类同时可以有多个基类,称为多重继承,这时的派生类同时得到了多个已有类的特征。一个派生类只有一个直接基类的情况称为单一继承。

c++中的继承方式有三种:公有继承(public),私有继承(private),保护继承(protected)。

public:公有继承方式表示的是“是一个”的关系,比如说学生继承了人这个类的话,可以说:学生是一个人,但人不一定是学生。

下面我们通过这段代码画出两个类的内存空间分布:

class Object
{
public:
	Object(int x = 0) :value(x)
	{
		cout << "create object" << this << endl;
	}
	~Object()
	{
		cout << "Destroy object" << this << endl;
	}
private:
	int value;
protected:
	int oa;
public:
	int ob;
};

class Base :public Object
{
private:
	int ix;
protected:
	int ia;
public:
	int ib; 
public:
	Base(int x = 0) :ix(x), Object(x + 10)
	{
		cout << "Create base" << this << endl;
	}
	~Base()
	{
		cout << "destroy" << this << endl;
	}
};
int main()
{
	Object obj;
	Base base1;
	return 0;
}

在上面这段代码中,Object这个类是基类,Base这个类以公有方式继承了Object这个类,所以Base这个类是派生类。

我们可以通过这小段代码大致画出这两个类的内存分布如下所示:

在这里插入图片描述
当Base以公有方式继承Object这个类时,Base可以访问它自己的所有成员,可以访问基类中的公有成员和保护成员,不可以访问其基类中的私有成员。如下图所示:

在这里插入图片描述

当Base以私有方式继承Object这个类时,Base可以访问它自己的所有成员,也可以访问基类中的公有成员和保护成员,但是不可以访问其基类中的私有成员。(由于Base可以访问自己的私有成员,而Object这个隐藏的对象也是Base这个类的私有成员,因此它也可以访问Object中的公有成员和保护成员)如下图所示:

在这里插入图片描述

不可以访问成员对象里面的私有和保护属性,可以访问继承来的保护和公有。也就是说在继承方式中保护继承和公有继承可以等同,但是一个对象不能访问别的对象成员里面的私有和保护成员属性,只能访问公有的成员属性。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值