【C++深度探索】继承机制详解(一)

07-02 1029阅读

hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹

【C++深度探索】继承机制详解(一)

💥个人主页:大耳朵土土垚的博客

💥 所属专栏:C++入门至进阶

这里将会不定期更新有关C++的内容,希望大家多多点赞关注收藏💖💖

目录

  • 1.继承的概念
  • 2.继承定义
    • 2.1定义格式
    • 2.2访问限定符
    • 2.3继承方式
    • 3.基类和派生类对象赋值转换
    • 4.继承中的重定义(隐藏)
    • 5.派生类的默认成员函数
      • ✨构造函数
      • ✨拷贝构造
      • ✨赋值运算符重载
      • ✨析构函数
      • 6.结语

        1.继承的概念

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

        2.继承定义

        2.1定义格式

        下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。

        //基类或父类
        class Person
        {
        public:
        	void Print()
        	{
        		cout 
        protected:
        	int _stuid; // 学号
        	int _major;	//专业
        };
        
        public:
            // 公有成员
        protected:
            // 保护成员
        private:
            // 私有成员
        };
        class Derived : public Base {
            // 公有继承
        };
        
        public:
            // 公有成员
        protected:
            // 保护成员
        private:
            // 私有成员
        };
        class Derived : protected Base {
            // 保护继承
        };
        
        public:
            // 公有成员
        protected:
            // 保护成员
        private:
            // 私有成员
        };
        class Derived : private Base {
            // 私有继承
        };
        
        public:
        	void Print()
        	{
        		cout 
        public:
        	void sPrint()
        	{
        		Person::Print();	//可以使用父类的公有成员
        	}
        protected:
        	int _stuid; // 学号
        	string _sname = _name;//可以访问父类的保护成员_name
        	string _stele = _tele; //不可以访问父类的私有成员_tele
        };
        
        protected:
        	string _name; // 姓名
        	string _sex;  //性别
        	int _age; // 年龄
        };
        //子类
        class Student : public Person
        {
        public:
        	int _No; // 学号
        };
        void Test()
        {
        	Student sobj;
        	// 1.子类对象可以赋值给父类对象/指针/引用
        	Person pobj = sobj;
        	Person* pp = &sobj;
        	Person& rp = sobj;
        	//2.基类对象不能赋值给派生类对象
        	sobj = pobj;//error
        }
        
        protected:
        	string _name = "胡土土"; // 姓名
        	int _num = 1234; // 身份证号
        };
        //子类
        class Student : public Person
        {
        public:
        	void Print()
        	{
        		cout 
        	Student s1;
        	s1.Print();
        };
        
        public:
        	void fun()
        	{
        		cout 
        public:
        	void fun(int i)
        	{
        		A::fun();
        		cout 
        	B b;
        	b.fun(10);
        }
        
        	B b;
        	b.fun();//这里没有给参数
        }
        
        	B b;
        	b.A::fun();//显示调用A中的fun函数
        }
        
        public:
        	Person(const char* name = "tutu")
        		: _name(name)
        	{
        		cout 
        		cout 
        		cout 
        		cout 
        protected:
        	int _num; //学号
        };
        int main()
        {
        	Student s;
        	return 0;
        }
        
        public:
        	Student(const char* name, int num)
        		:Person(name)	//显示调用父类构造函数
        		, _num(num)
        	{}	
        protected:
        	int _num; //学号
        };
        int main()
        {
        	Student s("tutu", 111);;
        	return 0;
        }
        
        public:
        	//构造函数
        	Student(const char* name, int num)
        		:Person(name)	//显示调用父类构造函数
        		, _num(num)
        	{}	
        	//拷贝构造
        	Student(const Student& st)
        		:Person(st)	//利用前面学习的基类与派生类的赋值转换
        		,_num(st._num)
        	{}
        protected:
        	int _num; //学号
        };
        
        	~Person();//这样写是错误的
        }
        
        	Person::~Person();
        	cout 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]