博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承的概念,赋值转换,作用域
阅读量:38381 次
发布时间:2022-02-22

本文共 1496 字,大约阅读时间需要 4 分钟。

目录


继承的概念及定义

继承的概念

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

 上代码

class Person{public:	void Print()	{		cout << "name:" << _name << endl;		cout << "age:" << _age << endl;	}protected:	string _name = "peter"; // 姓名	int _age = 18;  // 年龄};class Student : public Person{protected:	int _stuid; // 学号};class Teacher : public Person{protected:	int _jobid; // 工号};int main(){	Student s;	Teacher t;	s.Print();	t.Print();	return 0;}

运行结果

 结论:Student和Teacher复用了Person的成员

基类和派生类对象赋值转换

1.派生类对象 可以赋值给 基类的对象 / 基类的指针 / 基类的引用。这里有个形象的说法叫切片 或者切割。寓意把派生类中父类那部分切来赋值过去。

2.基类对象不能赋值给派生类对象。

int main(){	Student s;	//派生类对象 可以赋值给 基类的对象 / 基类的指针 / 基类的引用。	Person p = s;	Person* p = &s;	Person& p = s;	return 0;}

继承中的作用域

1. 在继承体系中基类和派生类都有独立的作用域。

2. 子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏, 也叫重定义。(在子类成员函数中,可以使用 基类::基类成员 显示访问)

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

// Student的_num和Person的_num构成隐藏关系,可以看出这样代码虽然能跑,但是非常容易混淆class Person{protected:		int _num = 111;};class Student : public Person{public:	void Print()	{		cout << " 学号:" << Person:: _num << endl;//Person中的num		cout << " 学号:" << _num << endl;//Student中的num	}protected:	int _num = 999; // 学号};void Test(){	Student s1;	s1.Print();};int main(){	Test();	return 0;}

 

// B中的fun和A中的fun不是构成重载,因为不是在同一作用域// B中的fun和A中的fun构成隐藏,成员函数满足函数名相同就构成隐藏。class A{public: void fun() { cout << "func()" << endl; }};class B : public A{public: void fun(int i) { A::fun(); cout << "func(int i)->" <<

转载地址:http://qvqcuy.baihongyu.com/

你可能感兴趣的文章
autorun.inf 配置说明
查看>>
U盘制作电脑启动钥匙
查看>>
Linux下c编程系统函数调用Signal信号的介绍
查看>>
linux内核介绍之系统调用过程
查看>>
linux内核介绍之开机启动过程
查看>>
linux下c编程之信号量semget,semop,semctl函数
查看>>
linux下c编程之内存共享shemget函数的实现及案例-bmi体重身高测试2
查看>>
enum枚举介绍
查看>>
什么是博士?
查看>>
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException解决方法
查看>>
javamail
查看>>
基本shell命令
查看>>
Bash常见的变量
查看>>
安装Zookeeper(windows)
查看>>
安装Zookeeper(linux)
查看>>
swiper轮播中嵌入video视频,安卓机兼容处理
查看>>
iframe 后退 浏览器history 问题
查看>>
js 下载pdf文件,而不是打开预览 方案
查看>>
mac使用命令终端连接linux服务器
查看>>
vue项目运行 ENOTFOUND localhost 报错
查看>>