c++入门学习笔记继承

原创 2002年12月27日 09:07:00

***继承,面向对象程序设计的上方宝剑,有了它上下通吃---Skyala***

人(类)->父母(对象)->子女(继承、多重继承)->子孙(多态性)---哇,My God!多么完美的曲线!

***********************************声明*******************************
1. 继承的概念及重要性
2. 基类
3. 派生类
4. 基类 VS 派生类
5. 多重继承
6. 应用举例
 a. 构造、析构的调用顺序、重定义函数 (TPoint.cpp) 
b. 多重继承及对象、指针应用 全面解释了此种关系(TObjPoi.cpp)
7. 问题(太多不明白了)
基类、派生类与指针、对象的关系
* 基、派指针可分别直接引用基、派对象 time * t,c; t=&c; t->(c中的成员)
* 基类指针可引用派生类对象,即派生类指针可直接赋给基类指针,引用的成员只能是基类部分
time * t;c2; t= &c2, t->c2(其内的基类成员)
* 派生类指针不能直接引用基类对象(类型的包容性不同),即基类指针不能直接赋给派生类指针。必先转换:基类对基类,派生类对派生类或派生对基(同2).
time * t,c; time2 * t2,c2; t2 =&c(错误的). 
改变1:
t=&c;t2 = (time2 *)t 等价于t2 = (time2 *)&c 强制基类指针为转换为派生类指针再赋给派生类 t = &c2;
改变2:t2 = (time2 *)&t 

总:基类指针包基、包派生类指针,自动转换
  派生类指针要进行转换为基为或转换派为同类的派指针

**********************************定义********************************
1. 继承的概念及重要性
  inheritance :是软件重用的一种形式,将相关的类组织起来,并分亨其间的共通数据和操作行为。
  最具吸引力的特点:新类可以从现有的类库中继承。提倡建立与现有的类有许多共性的新类来实现软件的重用
  能添加基类的所没有的特点以及取代和改进从基类继承来的特点
  单重继承形成树状层次结构,由基类和派生类构成了一种层次关系,继承的层次在系统的限制范围内是任意的。
继承机制定义了父子关系
2.基类
* 父类定义了所有子类共通的对外接口和私有实现内容,父类被称为基类
* 成员函数:
基类的私有成员只能被基类的成员函数和友元访问
基类的受保护成员只能被基类及派生类的成员函数和友元访问
* 继承基类的方式
public公有继承使用最多,公对公,受保护受保护,私不用 
protected:公、保护对保护, private :公、保护对私

3.派生类
* 新类继承预定义基类的数据成员和成员函数,而不必重新编写数据成员和成员函数,这种新类叫派生(derived)类
* 派生类永远不能直接访问基灶的私有成员
* 重定义函数 
派生类中无需继承的功能及要扩充的基类功能可以重定义成员函数,但在派生类再调用基类的同名函数时要用到作用域运算符Employee::print()
* 派生类的构造函数和析构函数
  由于派生类继承了基类的成员,所以在建立派生类的实例对象时,必须调用基类的构造函数来初始化派生类对象中的基类成员。可隐式的调用基类构造函数,也可在派生类的构造函数中通过给基类提供初始化值(成员初始化值列表)明确的调用构造函数
  构造函数调用顺序,先执行基类的构造函数->派生类的成员对象构造函数 ->派生类构造函数
  析构函数调用顺序正好相反。
++++++++++ 切记:派生类不继承基类的构造函数、析构函数和赋值运算符,但派生类的构造函数和赋值运算符能调用基类的构造函数和赋值运算符

4.基类 VS 派生类
  理解要点:可把基类和派生类都看成是一种类型如int
* 对象 
派生类的对象可作为基类的对象处理,也即定义的派生类对象Time t 可以访问基类的成员函数和受保护数据,派生类对象赋给基类对象也是合理的。反之则不行,基类的对象不能自动的成为派生类的对象,因为派生类有扩充基类的对象中有些没有了
* 指针
  派生类对象的指针可以隐式的转换为基类的指针。也即派生类指针可直接赋给基类指针,反之则不行
但可以用显式类型转换把基类指针强制转换为派生类指针,如要复引用该指针,要在转换前首先应该把它指向某个派生类对象(因不能引用该对象中并不存在的派生类对象) 如char * c;(int *) c;
* 两者关系 
 直接用基类指针引用基类对象:time * t,c; * t= &c; * t 返回对象c的引用 t ->(成员)
 直接用派生类指针引用派生类对象
 用基类指针引用一个派生类对象,但只能引用基类成员(在多态中很有用)
time * t, time2 c; * t = &c; * t 返回派生类的对象的引用, t ->(基类成员)
 用派生类指针引用基类对象,绝对不行。必须先强制转换为基类指针
time t, time2 * c; * c = &t, * c及 c->(成员)错误
  time t, time2 * c; * c = (time *)c c-> (成员)正确

指针操作是利用箭头成员选择运算符来访问成员的。
  无论怎样赋值,对象的引用一定要本对象有这个数据或成员函数--Skyala

5. 多重继承
* 一个类可从多个基类派生而来,这种派生叫多重继承。是一种图状层次结构(有向无环图)。注:功能强大,但易引起二义性,使用双目作用域为解决之一法
* 用法:一个类型A,是类型B,也是类型C
* 冒号后(:)加公有基类列表 class t:public d,public c {}

 

程序艺术--没了思想的程序永远不会打动人--天翼(Skyala)

c++入门学习笔记继承

 ***继承,面向对象程序设计的上方宝剑,有了它上下通吃---Skyala***人(类)->父母(对象)->子女(继承、多重继承)->子孙(多态性)---哇,My God!多么完美的曲线!******...
  • cowbo
  • cowbo
  • 2007年04月10日 15:11
  • 537

《Visual C# 2005入门经典》学习总结

        经过将近半个月的时间把James Foxall的 《Visual C# 2005入门经典》读了一遍,智者总归是智者,能够让读者这么容易去接受一门语言。现在我我从书中看到的一些东西总结一...
  • rocket5725
  • rocket5725
  • 2008年01月13日 20:38
  • 846

c++的boost库学习笔记

c++的boost库学习 boost和stlport编译,编译过程好麻烦,根据网上教程和boost完全开发指南,加自己摸索才勉强编译完成,做个笔记总结一下,具体编译方法,暂且不写   1,time...
  • u013013970
  • u013013970
  • 2015年04月18日 08:21
  • 1169

C#入门经典 学习笔记(一)

(1).NET Framework:  .NET 框架。其包含类库和公共语言运行库。类库分为不同的模块,不同的操作系统可以根据自身的特性支持其中或全部的模块。 (2)CTS(Common Type...
  • EngraveSmile
  • EngraveSmile
  • 2017年04月08日 15:04
  • 275

C++学习笔记(一) 补充篇 基础语法 — 参考慕课网 值得推荐!

2016年8月23日 前段时间真的是恍然大悟,书看错了,我看的 C++ prime plus看的真心的难受,也不知道这本书到底在写什么。 2016年8月28日 一晃又过了4-5天,真快啊,发现那...
  • David_Han008
  • David_Han008
  • 2016年08月25日 16:47
  • 3078

C++入门学习笔记

这些是我刚学习C++的笔记,拿出来与大家分享,希望大家更容易入门! 1、 运算符(取入)用作输入运算;cin是标准的输入流。 2、 输出:一个输出表达式的结果本身还可以用于进一步的输出。 ...
  • u010983763
  • u010983763
  • 2016年11月10日 08:40
  • 1935

慕课网Java入门学习笔记

Java 入门第二季Java 中的 static 使用之静态方法1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通...
  • u010545480
  • u010545480
  • 2017年03月07日 22:35
  • 331

C++模板元入门(入坑)体验

其实我也不知道这能不能算入门,只能说看了之后大体上能有一个概念。 之前在知乎(逼乎)上看到关于程序员不为人知的禁术的话题,手滑点开看到一个c++模板元编程,说是C++的最高级禁术,也有人说它是黑魔法,...
  • GabrielGu
  • GabrielGu
  • 2016年05月18日 23:50
  • 1911

C++ static函数 继承问题

今天在论坛上看了些关于 C++中static函数 继承的问题,顺便弄个小程序试了试。。#include using namespace std; class   base   { public...
  • Chris_Magic
  • Chris_Magic
  • 2010年12月09日 18:43
  • 5565

汇编语言入门学习笔记1

汇编语言学习笔记 初步认识汇编 1.基本认识 什么是汇编语言? 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。学习汇编语言很多时候不是为了用汇编语...
  • diaoaa
  • diaoaa
  • 2013年11月05日 11:02
  • 1065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++入门学习笔记继承
举报原因:
原因补充:

(最多只允许输入30个字)