C++【继承】

06-02 300阅读

继承

  • 1.继承
    • 1.1 继承的概念
    • 1.2继承的定义
      • 1.2.1定义格式
      • 1.2.2继承基类成员访问方式的变化
      • 1.3继承模板
      • 2.基类和派生类之间的转换

        1.继承

        1.1 继承的概念

        继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称派生类。

        没使用继承的两个类Student和Teacher,Student和Teacher类里面都有姓名/地址/年龄/电话/住址等成员变量,都有identity身份证的成员函数,设计就开始冗余。

        class Student
        {
        public:
        	// 进⼊校园/图书馆/实验室刷⼆维码等⾝份认证
        	void identity()
        	{
        		// ...
        	}
        	// 学习
        	void study()
        	{
        		// ...
        	}
        protected:
        	string _name = "peter"; // 姓名
        	string _address; // 地址
        	string _tel; // 电话
        	int _age = 18; // 年龄
        	int _stuid; // 学号
        };
        class Teacher
        {
        public:
        	
        		void identity()
        	{
        		// ...
        	}
        	// 授课
        	void teaching()
        	{
        		//...
        	}
        protected:
        	string _name = "张三"; // 姓名
        	int _age = 18; // 年龄
        	string _address; // 地址
        	string _tel; // 电话
        	string _title; // 职称
        };
        int main()
        {
        	return 0;
        }
        

        下面我们公共的成员都放到Person类中,Student和teacher都继承Person,就可以复用这些成员,就不需要重复定义了,省去了很多麻烦。

        class Person
        {
        public:
        	// 进⼊校园/图书馆/实验室刷⼆维码等⾝份认证
        	void identity()
        	{
        		cout 
        public:
        	// 学习
        	void study()
        	{
        		// ...
        		}
        		protected:
        		int _stuid; // 学号
        };
        class Teacher : public Person
        {
        public:
        	// 授课
        	void teaching()
        	{
        		//...
        	}
        protected:
        	string title; // 职称
        };
        int main()
        {
        	Student s;
        	Teacher t;
        	s.identity();
        	t.identity();
        	return 0;
        }
        
        	//template
        	public:
        		void push(const T& x)
        		{
        			// 基类是类模板时,需要指定⼀下类域,
        			// 否则编译报错:error C3861: “push_back”: 找不到标识符
        			
        				// 因为stack
        			vector
        			return vector
        			return vector
        	jiang::stack
        		cout 
        	jiang::stack
        		cout 
        protected:
        	string _name; // 姓名
        	string _sex; // 性别
        	int _age; // 年龄
        };
        class Student : public Person
        {
        public:
        	int _No; // 学号
        };
        int main()
        {
        	Student sobj;
        	// 1.派⽣类对象可以赋值给基类的指针/引⽤
        	Person* pp = &sobj;
        	Person& rp = sobj;
        	// ⽣类对象可以赋值给基类的对象是通过调⽤后⾯会讲解的基类的拷⻉构造完成的
        	Person pobj = sobj;
        	//2.基类对象不能赋值给派⽣类对象,这⾥会编译报错
        	sobj = pobj;
        	return 0;
        }
        
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码