C++从零开始(day40)——继承

本文介绍了C++中继承的基本概念,包括继承的定义、访问方式、继承关系、父类和子类对象的赋值转换以及作用域中的隐藏现象。作者以实例说明了如何在实际编程中运用继承机制以提高代码复用性。
摘要由CSDN通过智能技术生成

这是关于一个普通双非本科大一学生的C++的学习记录贴

在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料

那么开启正题

今天分享的是关于继承的知识点

1.继承的概念及定义

1.1继承的概念

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

1.2继承的定义

1.2.1定义格式

我们来看下面的代码

class Person
{
public:
	int _age;
};

class Student : public Person
{
public:
	int _stuid;
};

这段代码中Student就是派生类(子类),public就是继承方式,Person就是基类(父类)

1.2.2继承关系和访问限定符

在学习封装时候我们了解到访问限定符有三种

public访问,protected访问,private访问

与此对应的,继承方式也有三种

public继承,protected访问,private访问

1.2.3继承父类成员访问方式的变化

以前我们说protected(保护)和private(私有)暂时没有区别,而在继承这里就体现出来了区别

在public继承下,子类中,父类的private成员是无法访问的,而protected成员是可以访问的

不同的继承方式与不同的访问限定符,会是子类对父类的访问不一样,下面我们给出规律

父类的private成员在子类中无论以任何方式继承都是无法访问的

对于其他的,我们有下面的公式

父类成员在子类中的访问方式 == Min(成员在父类中的访问限定符,继承方式)

(public < protected < private)

注意:
1. 使用关键字class时默认继承方式是private,使用struct时默认继承方式时public,不过最好显式给出继承方式

2.实际运用中一般都是public继承,几乎很少有其他两种继承出现,我们也不提倡(维护性不强)

2.父类和子类对象赋值转换

1.子类对象可以赋值给父类的对象 / 父类的指针 / 父类的引用。(我们叫切割或者切片)

2.父类对象不能赋值给子类对象

class Person
{
protected:
	int _age = 10;
};

class Student : public Person
{
public:
	int _stuid;
};

void Test1()
{
	Student s;

	// 1.子类对象可以赋值给父类的对象 / 父类的指针 / 父类的引用。
	// (我们叫切割或者切片)
	Person p = s;
	Person* pp = &s;
	Person& rp = s;

	// 2.父类对象不能赋值给子类对象
	s = p;(err) 
}

3.继承中的作用域

1.在继承体系中父类和子类都有独自的作用域

2.父类和子类有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫做隐藏(也叫做重定义)

3.如果是成员函数的隐藏,只要是函数名相同就构成隐藏

4.实际中继承体系里,最好不要定义同名成员

class A
{
public:
	void Func(int i = 10)
	{
		cout << "A::Func(int)" << endl;
	}

	void Func(char ch = 'a')
	{
		cout << "A::Func(char)" << endl;
	}
};

class B : public A
{
public:
	void Func(int i)
	{
		cout << "B::Func()" << endl;
	}
};

void Test2()
{
	A a;
	B b;
	a.Func(1);
	a.Func('a');
	b.Func(1);
}

 上面的几个Func函数分别构成重构隐藏

 新手写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值