派生类的3种继承方式总结
- 格式:doc
- 大小:12.42 KB
- 文档页数:2
派生类的定义和使用
派生类的定义和使用
派生类是通过从一个已有的类(被称为基类)派生而来的新类。
派生类也可称作“子类”,基类也可称作“父类”,它们之间存在着一种“从属”关系。
派生类可以保留基类的所有功能,并且可以在基类的基础上增加新的特性和功能,从而实现新的功能。
派生类通常具有两个特点:(1)它可以从基类继承成员变量;(2)它可以重新实现基类的方法,即重写基类的方法。
使用派生类的一般步骤如下:
1. 定义基类:首先定义一个基类,该类中包括必需的成员,如成员变量、构造函数和成员函数。
2. 定义派生类:定义派生类时,往往会使用基类中的成员变量和成员函数,它可以使用基类的构造函数,也可以定义自己的构造函数。
3. 使用派生类:派生类的成员变量和成员函数,可以像使用基类一样使用,也可以通过多态(即重写基类的方法)实现多态性。
派生类的一个重要作用是将复杂的问题细分为若干简单的子问题,从而提高程序的可维护性和可扩展性。
派生类也是典型的面向对象编程(OOP)的重要技术,它可以大大简化大型复杂的程序编写过程。
- 1 -。
随笔- 90 文章- 0 评论- 54公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。
1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。
2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
3. 保护继承(protected)保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。
下面列出三种不同的继承方式的基类特性和派生类特性。
在上图中:1)基类成员对派生类都是:共有和保护的成员是可见的,私有的的成员是不可见的。
2)基类成员对派生类的对象来说:要看基类的成员在派生类中变成了什么类型的成员。
如:私有继承时,基类的共有成员和私有成员都变成了派生类中的私有成员,因此对于派生类中的对象来说基类的共有成员和私有成员就是不可见的。
为了进一步理解三种不同的继承方式在其成员的可见性方面的区别,下面从三种不同角度进行讨论。
对于公有继承方式(1) 基类成员对其对象的可见性:公有成员可见,其他不可见。
这里保护成员同于私有成员。
(2) 基类成员对派生类的可见性:公有成员和保护成员可见,而私有成员不可见。
这里保护成员同于公有成员。
(3) 基类成员对派生类对象的可见性:公有成员可见,其他成员不可见。
所以,在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。
这里,一定要区分清楚派生类的对象和派生类中的成员函数对基类的访问是不同的。
对于私有继承方式(1) 基类成员对其对象的可见性:公有成员可见,其他成员不可见。
(2) 基类成员对派生类的可见性:公有成员和保护成员是可见的,而私有成员是不可见的。
c语言三种继承方式C语言中的继承方式有三种,分别是单继承、多继承和多重继承。
1. 单继承在C语言中,单继承是指一个类只能继承自一个父类。
通过单继承,子类可以继承父类的成员变量和成员函数,并且可以在子类中对这些成员进行重写或扩展。
这种继承方式可以实现代码的重用和扩展,提高了代码的可维护性和可读性。
2. 多继承多继承是指一个类可以同时继承自多个父类。
通过多继承,子类可以继承多个父类的成员变量和成员函数。
在C语言中,可以通过结构体来实现多继承的效果。
子类可以通过结构体嵌套的方式,将多个父类的成员变量和成员函数组合在一起,从而实现多继承的效果。
多继承可以在一定程度上提高代码的复用性,但也增加了代码的复杂性和理解难度。
3. 多重继承多重继承是指一个类同时继承自多个父类,并且这些父类之间存在继承关系。
通过多重继承,子类可以继承多个父类的成员变量和成员函数,并且可以通过继承链的方式,依次调用父类的成员函数。
在C语言中,可以通过结构体嵌套的方式来实现多重继承。
多重继承可以实现更复杂的代码结构,但也增加了代码的复杂性和维护难度。
继承是面向对象编程中的重要概念,通过继承可以实现代码的重用和扩展。
在C语言中,可以通过结构体嵌套的方式来模拟继承的效果。
通过继承,可以将相关的代码组织在一起,提高代码的可读性和可维护性。
在实际的程序设计中,选择何种继承方式应根据具体的需求和设计考虑。
单继承适用于简单的继承关系,多继承适用于需要同时继承多个父类的情况,多重继承适用于父类之间存在继承关系的情况。
不同的继承方式在代码结构和功能实现上有所不同,需要根据实际情况进行选择。
在使用继承时,需要注意继承关系的合理性和代码的可维护性。
继承关系应符合面向对象编程的设计原则,避免出现过于复杂的继承链和多重继承导致的代码混乱。
同时,需要注意在子类中对父类成员的访问权限控制,避免破坏封装性和安全性。
C语言中的继承方式包括单继承、多继承和多重继承。
通过继承,可以实现代码的重用和扩展,提高代码的可维护性和可读性。
继承与派生类1 知识要点1.掌握继承和派生的定义,派生类的定义方法。
(1)掌握继承的两种类型:单继承和多继承。
(2)掌握private,public,protected三种继承方式的特点。
继承方式决定了基类中的成员在派生类中的属性。
三种继承方式的共同点:基类的private成员在派生类中不可见。
区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。
(3)掌握派生类中的构造函数和析构函数的使用。
基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。
派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。
(4)掌握派生类的同名覆盖规则。
(5)掌握赋值兼容规则。
基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。
2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。
派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。
3.掌握虚基类的概念和定义方法。
在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。
2 典型例题分析与解答例题1:下列对派生类的描述中,()是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。
简述派生类的继承方式派生类(子类)的继承方式是面向对象编程中的一种重要的技术。
通过继承,子类可以继承父类的属性和方法,并且还可以额外拥有自己的属性和方法。
在继承中,子类可以选择不同的继承方式,以满足不同的需求和场景。
常见的继承方式有三种:公有继承、私有继承和保护继承。
1. 公有继承:公有继承是最常用的继承方式,也是默认的继承方式。
在公有继承中,子类继承了父类的公有成员和保护成员,但是不继承父类的私有成员。
公有继承的特点是子类可以访问和调用父类的公有成员和保护成员,可以重写父类的方法,并可以添加新的成员。
这种继承方式常用于描述"is-a"关系,即子类是父类的一种特殊情况。
2. 私有继承:私有继承是一种特殊的继承方式,在私有继承中,子类继承了父类所有的成员,包括公有成员、保护成员和私有成员。
但是,子类不能访问和调用父类的任何成员,除非在子类中重新定义相应的方法。
私有继承的特点是子类可以重写父类的方法,并可以添加新的成员,但是不能访问和调用父类的成员。
这种继承方式常用于描述"has-a"关系,即子类具有父类的功能。
3. 保护继承:保护继承是介于公有继承和私有继承之间的一种继承方式。
在保护继承中,子类继承了父类的保护成员和公有成员,但是不能继承父类的私有成员。
子类可以访问和调用父类的保护成员和公有成员,可以重写父类的方法,并可以添加新的成员。
保护继承的特点是子类可以访问和调用父类的保护成员,但是不能访问和调用父类的私有成员。
这种继承方式常用于描述"is-implemented-in-terms-of"关系,即子类使用父类的实现方式。
总之,派生类的继承方式提供了灵活多样的方式来实现代码的复用和扩展。
在选择继承方式时,需要根据具体的需求和场景来选择合适的方式。
公有继承适用于描述"is-a"关系,私有继承适用于描述"has-a"关系,而保护继承适用于描述"is-implemented-in-terms-of"关系。
C++中类继承public,protected和private关键字作⽤详解及派⽣类的访问权限注意:本⽂有时候会⽤Visual Studio Code⾥插件的⾃动补全功能来展⽰访问权限的范围(当且仅当⾃动补全范围等价于对象访问权限范围的时候),但是不代表⽇常使⽤时只要是出现在⾃动补全范围内的可调⽤对象/成员都是可访问的。
⼀,公有继承#include<cstdio>#include<iostream>#include<string>#include<algorithm>#include<vector>class Base{public:int PublicBase;void PublicPrint() {std::cout << "PublicPrint()" << std::endl;}protected:int ProtectedBase;void ProtectedPrint() {std::cout << "ProtectedPrint()" << std::endl;}private:int PrivateBase;void PrivatePrint() {std::cout << "PrivatePrint()" << std::endl;}};class Derived : public Base{public:void DerivedPrint() {std::cout << "DerivedPrint()" << std::endl;std::cout << ProtectedBase << std::endl;//若要访问protected的数据成员需要通过派⽣类⾥的成员函数访问PublicPrint();ProtectedPrint();}};int main(void){Derived der;der.PublicPrint();der.PublicBase;//der.ProtectedBase; //不能直接访问protected数据成员//der.ProtectedPrint();//意思同上return0;} 公有继承的派⽣类可以直接访问基类的public中的数据成员和成员函数,不能直接访问protected中的数据成员和成员函数,若要访问protected的数据成员需要通过派⽣类⾥的成员函数访问。
C++类成员的访问权限及继承⽅式(public,protected,private)1、访问权限C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表⽰公有的、受保护的、私有的,被称为成员访问限定符。
所谓访问权限,就是你能不能使⽤该类中的成员。
在类的内部(定义类的代码内部),⽆论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。
在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 public 属性的成员,不能访问 private、protected 属性的成员。
类成员的访问权限由⾼到低依次为 public --> protected --> private。
2、继承⽅式public、protected、private 指定继承⽅式不同的继承⽅式会影响基类成员在派⽣类中的访问权限。
1) public继承⽅式基类中所有 public 成员在派⽣类中为 public 属性;基类中所有 protected 成员在派⽣类中为 protected 属性;基类中所有 private 成员在派⽣类中不能使⽤。
2) protected继承⽅式基类中的所有 public 成员在派⽣类中为 protected 属性;基类中的所有 protected 成员在派⽣类中为 protected 属性;基类中的所有 private 成员在派⽣类中不能使⽤。
3) private继承⽅式基类中的所有 public 成员在派⽣类中均为 private 属性;基类中的所有 protected 成员在派⽣类中均为 private 属性;基类中的所有 private 成员在派⽣类中不能使⽤。
C++继承的⼀般语法为:class 派⽣类名:[继承⽅式]基类名{派⽣类新增加的成员};下⾯⽤多级继承的例⼦来说明public、protected、private的关系,如下:1 #include<iostream>2using namespace std;3//基类People4class People{5public:6void setname(char *name);7void setage(int age);8void sethobby(char *hobby);9char *gethobby();10protected:11char *m_name;12int m_age;13private:14char *m_hobby;15 };16void People::setname(char *name){ m_name = name; }17void People::setage(int age){ m_age = age; }18void People::sethobby(char *hobby){ m_hobby = hobby; }19char *People::gethobby(){ return m_hobby; }20//派⽣类Student21class Student: public People{22public:23void setscore(float score);24protected:25float m_score;26 };27void Student::setscore(float score){ m_score = score; }28//派⽣类Pupil29class Pupil: public Student{30public:31void setranking(int ranking);32void display(); //显⽰输出函数33private:34int m_ranking;35 };36void Pupil::setranking(int ranking){ m_ranking = ranking; }37void Pupil::display(){38 cout<<m_name<<"的年龄是"<<m_age<<",考试成绩为"<<m_score<<"分,班级排名第"<<m_ranking<<",TA喜欢"<<gethobby()<<"。
C++中公有继承私有继承和保护继承的区别
公有继承(public)、私有继承(private)和保护继承(protected)三种继承⽅式,可见即可以访问,不可见即不可以访问。
1. 公有继承⽅式:
基类成员的可见性对派⽣类来说,基类的公有成员和保护成员可见:基类的公有成员和保护成员作为派⽣类的成员时,它们都保持原有的状态;基类的私有成员不可见:基类的私有成员仍然是私有的,派⽣类不可访问基类中的私有成员。
基类成员的可见性对派⽣类对象来说,基类的公有成员是可见的,其他成员是不可见。
2. 私有继承⽅式:
基类成员的可见性对派⽣类来说,基类的公有成员和保护成员是可见的:基类的公有成员和保护成员都作为派⽣类的私有成员,并且不能被这个派⽣类的⼦类所访问;基类的私有成员是不可见的:派⽣类不可访问基类中的私有成员。
基类成员的可见性对派⽣类对象来说,基类的所有成员都是不可见的。
3. 保护继承⽅式:
基类成员的可见性对派⽣类来说,基类的公有成员和保护成员是可见的:基类的公有成员和保护成员都作为派⽣类的保护成员,并且派⽣类的⼦类可以访问;基类的私有成员是不可见的:派⽣类不可访问基类中的私有成员。
基类成员的可见性对派⽣类对象来说,基类的所有成员都是不可见的。
总之,基类的成员,继承为派⽣类的成员,其访问属性发⽣了变化,对派⽣类的对象及派⽣类的⼦类对派⽣类的访问造成了影响;基类的成员访问属性没变,派⽣类访问基类不会变化。
派生类的3种继承方式总结
1,公有继承方式
在公有继承时:
(1)派生类的对象可以访问基类中的公有成员;
(2)派生类的成员函数可以访问基类中的公有成员和保护成员。
2,保护继承方式
在保护继承时:
(1)派生类的对象对基类的所有成员都不可访问;
(2)派生类的成员函数可以访问基类中的公有成员和保护成员,但是它们都作为派生类的保护成员;
3,私有继承方式
在私有继承时:
(1)派生类的对象对基类的所有成员都不可访问;
(2)派生类的成员函数可以访问基类中的公有成员和保护成员,但是它们都作为派生类的私有成员,不能再被派生类的子类所访问;
注:基类的成员只能由直接派生类访问,所以无法再往下继承;
在私有继承下,若将派生类对象赋给基类对象时:
派生类对象的空间中,包含基类的对象,只是无法让其公开的访问基类的成员(即对派生类对象来说,基类的所有成员都是不可见的)。
总说几句:基类的private成员,在派生类中成为不可直接使用的成员;
在无继承的类中,protected和private 控制符是没有差别的;
在继承中:
基类的private对所有的外界都屏蔽(包括自己的派生类);
基类的protected控制符对应用程序是屏蔽的,但对其派生类是可访问的。