c++之继承
来源:互联网 发布:什么软件类似象牙社区 编辑:程序博客网 时间:2024/05/21 09:49
子类对象空间总是不小于基类对象。
classFather{
int a,b;
public:
// 成员函数
};
class Son:publicFather{
int c;
public:
// 成员函数
};
默认构造:
如果子类没有构造函数,则调用默认构造函数,默认构造函数转而先调用默认父类构造函数,完成父类对象部分的构造。
如果父类的上面还有父类,则依次递归。
自定义构造:
为了规定父类构造函数的调用方式而不是默认调用,需要自定义子类构造函数,并且,在构造函数定义体的初始化列表中描述父类构造函数的调用形式。描述形式与对象成员构造的描述一致。
覆盖(overlap):
子类定义了与祖先类(父类,或者父类的父类...)名字相同的成员.
class Student{
public:
void display();
// ...
};
class GraStudent:public Student{
public:
void display();//overlap
// ...
};
void fn(){
GraStudent gs;
gs.display(); //callGraStudent::display()
}
捆绑子类对象访问成员函数,则首先匹配子类,然后父类,再父类的父类,依此类推。
拷贝构造:
子类若没有定义拷贝构造函数,则子类对象在拷贝创建时先调用父类的拷贝构造函数,再完成自己的位对位拷贝。
父类若没有定义拷贝构造函数,则子类对象在拷贝创建中调用父类默认的拷贝构造函数。
继承方式:
继承可以公有继承,保护继承和私有继承。
公有继承是普通继承,基类可以为大多数应用服务,也可以重复继承。
保护继承是“单传”继承,只继承给自己的后代,应用是以子孙的公有成员函数来对外展开服务的。
私有继承是“绝版”继承,该基类只继承直接的子类,而不考虑让子类再继承下去。
继承体系中,子类可以在祖先类成员可见的范围中调整其访问控制属性。
class Base{ int b1;protected: int b2; void fb2(){ b1=1; }public: int b3; void fb3(){ b1=1; }};//-----------------------------------class Pri : private Base{public: void test(){ b1=1; // error b2=1; // ok b3=1; // ok fb2(); // ok fb3(); // ok }};//-----------------------------------class FromPri : public Pri{public: void test(){ b1=1; // error b2=1; // error b3=1; // error fb2(); // error fb3(); // error }};//-----------------------------------class Pro : protected Base{public: void test(){ b1=1; // error b2=1; // ok b3=1; // ok fb2(); // ok fb3(); // ok }};//-----------------------------------class FromPro : public Base{public: void test(){ b1=1; // error b2=1; // ok b3=1; // ok fb2(); // ok fb3(); // ok }};//-----------------------------------class Pub : public Base{public: void test(){ b1=1; // error b2=1; // ok b3=1; // ok fb2(); // ok fb3(); // ok }};//-----------------------------------class FromPub : public Base{public: void test(){ b1=1; // error b2=1; // ok b3=1; // ok fb2(); // ok fb3(); // ok }};//-----------------------------------int main(){ Pri priObj; priObj.b1=1; // error priObj.b2=1; // error priObj.b3=1; // error Pro proObj; proObj.b1=1; // error proObj.b2=1; // error proObj.b3=1; // error Pub pubObj; pubObj.b1=1; // error pubObj.b2=1; // error pubObj.b3=1; // ok}//====================================
- object-c之继承
- Object-C之继承
- 【C++】:C++之继承
- objective-c之继承
- C ++之继承浅析
- 初识Objecive-C 之 继承
- 【C#】面向对象之继承
- 【C#】C#OOP编程之继承性
- 【C++】继承和多态之——菱形继承
- c与面象对象之继承
- IOS之Objective-C 的“多继承”
- IOS之Objective-C 的“多继承”
- Objective-C语法之继承、封装、多态
- Object-C: 学习实例之继承
- 用C实现面向对象之继承
- 【iOS开发之Objective-C】继承
- object -c笔记之导入和继承
- c++/java 之继承和接口
- POJ1364基本的查分约束问题
- 黑马程序员—java基础语言简介
- 简单数学训练—C
- 给JTextArea添加滚动条
- netcdf install document
- c++之继承
- 超市O2O,学会利用APP
- TestFlight被收购了,那我们怎么使用呢?
- 系统分析师上午试题笔记 软件工程一
- poj1509最小表示法
- iOS开发使用半透明模糊效果方法整理
- 买了两本系统分析师的书比网上的资料好多了
- ZigBee无线传感网络家庭自动化设计
- objc.io#19#DTrace