2026/5/18 16:14:40
网站建设
项目流程
做游戏的网站,wordpress自豪的,韩都衣舍网站建设的改进,做网站最重要的是什么一、继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段#xff0c;它允许我们在保持原有类特性的基础上进行扩展#xff0c;可以增加方法#xff08;成员函数#xff09;和属性#xff08;成员变量#xff09;#xff0c;这样产生的类#xff0c;叫做…一、继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段它允许我们在保持原有类特性的基础上进行扩展可以增加方法成员函数和属性成员变量这样产生的类叫做派生类或子类。作为基础的原有类称为基类或父类。二、定义与使用1. 定义方式继承的定义方式是代码语言javascriptAI代码解释class 派生类名 : 继承方式 基类名 {派生类内容};假如定义一个Person类表示人派生出一个Student类表示学生。Student包括Person的方法与属性同时也有Student的独特方法与属性。那么就可以先定义出Person类再继承出Student类代码语言javascriptAI代码解释class Person { public: Person() { cout Person() endl; } private: //名字 string name; }; class Student : public Person { public: Student() { cout Student() endl; } private: //学号 string id; };2. 继承方式继承方式有三种public、private、protected。就是三种访问限定符它们之间有什么关系呢基类成员的属性\派生类的继承方式public继承后↓protected继承后↓private继承后↓基类的public成员变成→派生类的public成员派生类的protected成员派生类的private成员基类的protected成员变成→派生类的protected成员派生类的protected成员派生类的private成员基类的prvate成员变成→在派生类中不可见在派生类中不可见在派生类中不可见哎这里我们就看出来protected和private的区别了。总结一下上面的表格能发现基类的private成员在派生类中都是不可见的。基类的其他成员在派生类中的访问方式为Min(在基类的访问限定符继承方式)也就是两者里的较小者。其中public protected private。基类的private成员无论以什么方式继承在派生类中都是不可见的。不可见指的是基类的private成员其实被继承到了派生类中但是语法上限制派生类对象在类内或类外都不能去访问不可见成员。基类private成员在派生类中不能直接被访问。如果基类成员不想在类外被访问但是想在派生类中能访问就定义为protected可以看出protected限定符是因继承才出现的。继承方式也可以不写使用class关键字时默认的继承方式是private使用struct时默认的继承方式是public。最好显式写出继承方式。在实际应用中我们一般都使用public继承很少使用也不建议用protected和private继承不利于代码维护。public继承能使基类和派生类中的接口访问方式保持一致。3. 类模板的继承类模板也是可以继承的。特殊的是在定义派生类时基类如果是类模板必须指定类域否则编译报错。代码语言javascriptAI代码解释templateclass T class stack : public std::vectorT //或者前面using namespace std; { public: void push(const T x) { push_back(x); } };三、基类和派生类的转换public继承的派生类对象可以赋值给基类的指针或基类的引用叫做赋值兼容转换形象的说法是切片就像把派生类中的基类那部分切割出来。基类指针或引用指向的是派生类中切出来的基类那部分。在这里插入图片描述比如代码语言javascriptAI代码解释class Person { public: Person() { cout Person() endl; } protected: string name zhangsan; }; class Student : public Person { public: Student() { cout Person::name endl; } private: string id 000001; }; int main() { Student stu; Person* ptr stu; Person ref stu; //此时ptr和ref只指向和引用stu中属于基类的内容 return 0; }注意基类对象不能赋值给派生类对象。四、基类和派生类的作用域在继承体系中基类和派生类都有各自独立的作用域所以派生类和基类中可以有同名成员但派生类中将屏蔽对基类的同名成员的直接访问这种情况叫做隐藏。若想访问基类的这个成员需要写成基类::基类成员显式访问。 需要知道的是如果是基类和派生类的成员函数只要函数名相同就构成隐藏。不过在实际应用继承体系中我们最好就不要定义同名的成员了。代码语言javascriptAI代码解释class A { protected: int x; }; class B : public A { public: test() { //直接访问不到基类的同名成员 cout x endl; //必须指定类域才能访问 cout A::x endl; } protected: int x; };再来看一个例子代码语言javascriptAI代码解释class A { public: void func(int x) { cout func(int x) endl; } }; class B : public A { public: void func() { cout func() endl; } };基类A和派生类B中有同名函数虽然参数列表不同但是还是构成隐藏关系。直接访问func只会调到派生类的func在这里插入图片描述若想访问到基类的func也要指定类域在这里插入图片描述五、派生类的默认成员函数类有默认成员函数的概念派生类也有。最重要的是要理解基类成员的初始化、清理等行为都是作为一个整体来完成的。派生类的构造函数必须要调用基类的构造函数来初始化基类的那一部分成员。如果基类没有默认的构造函数则必须在派生类的构造函数的初始化列表阶段显式调用。而派生类对象初始化时先调用基类构造再调派生类构造。派生类的析构函数会在被调用完成后自动调用基类的析构函数因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序。派生类析构函数和基类析构函数构成隐藏关系这涉及到多态的知识。派生类的拷贝构造函数必须调用基类的拷贝构造函数完成基类成员的拷贝初始化。派生类的operator必须要调用基类的operator完成基类的复制。需要注意的是派生类的operator和基类的operator构成隐藏关系所以显式调用基类的operator时需要指定基类作用域。www.dongchedi.com/article/7597158211648979481www.dongchedi.com/article/7597159849193439769www.dongchedi.com/article/7597158216006861336www.dongchedi.com/article/7597158526565302808www.dongchedi.com/article/7597157528921031193www.dongchedi.com/article/7597157528921129497www.dongchedi.com/article/7597158828748390937www.dongchedi.com/article/7597157605437768216www.dongchedi.com/article/7597157947516748350www.dongchedi.com/article/7597157059532309016www.dongchedi.com/article/7597157528921195033www.dongchedi.com/article/7597157918697554456www.dongchedi.com/article/7597158225347412542www.dongchedi.com/article/7597154994248679961www.dongchedi.com/article/7597156908373656088www.dongchedi.com/article/7597155389817848344www.dongchedi.com/article/7597156872139178558www.dongchedi.com/article/7597156044007031320www.dongchedi.com/article/7597154815566905881www.dongchedi.com/article/7597156083979321918www.dongchedi.com/article/7597154815567233561www.dongchedi.com/article/7597155548034925081www.dongchedi.com/article/7597153356364497433www.dongchedi.com/article/7597155446209643033www.dongchedi.com/article/7597153704529101336www.dongchedi.com/article/7597155329252049470www.dongchedi.com/article/7597153135701885465www.dongchedi.com/article/7597153238500491838www.dongchedi.com/article/7597153219835724350www.dongchedi.com/article/7597152705005535806www.dongchedi.com/article/7597152321495679513www.dongchedi.com/article/7597153608114995774www.dongchedi.com/article/7597153135702147609www.dongchedi.com/article/7597153201120559640www.dongchedi.com/article/7597152939333354008www.dongchedi.com/article/7597153929230828094www.dongchedi.com/article/7597151125615264281www.dongchedi.com/article/7597151505988207166www.dongchedi.com/article/7597153085034889752www.dongchedi.com/article/7597151163980497432www.dongchedi.com/article/7597144704257835545www.dongchedi.com/article/7597144998823641624www.dongchedi.com/article/7597145929174991384www.dongchedi.com/article/7597145158681231896www.dongchedi.com/article/7597144871509443096www.dongchedi.com/article/7597144629225505342www.dongchedi.com/article/7597142612923040281www.dongchedi.com/article/7597142227030196761www.dongchedi.com/article/7597142612923335193www.dongchedi.com/article/7597143374680359486www.dongchedi.com/article/7597143842856485400www.dongchedi.com/article/7597143131083342361www.dongchedi.com/article/7597143126788555289www.dongchedi.com/article/7597138911823086105www.dongchedi.com/article/7597139690651009561www.dongchedi.com/article/7597137695479087678www.dongchedi.com/article/7597137790945575448www.dongchedi.com/article/7597139271543407129www.dongchedi.com/article/7597137533486989848www.dongchedi.com/article/7597138669631390232www.dongchedi.com/article/7597100744432910873www.dongchedi.com/article/7597101277981491736www.dongchedi.com/article/7597101132292637209www.dongchedi.com/article/7597091310348403262