54,C++(08)

/*
达内学习 C++ day52 2013-11-14
*/
回忆:
继承
1,继承的目的
  a,代码复用  传承父类所有的数据(属性和函数)
  b,扩展  一个子类具备父类所有的功能和特性
      把一个子类对象 当做父类对象来看
2,组合 和 继承的关系
3,继承的语法
   class B:继承方式 A{};
4,继承的方式
  公开  保护   私有
5,如果是私有继承 如何对父类的数据进行访问
  public 接口  或者  友元
6,不能被子类继承的
 构造函数  析构函数  拷贝构造 赋值运算符
7,子类对父类构造函数  和 析构函数的调用
  子类会默认调用父类的无参构造 和 析构函数
  也可以指定调用父类的构造函数(初始化参数列表)
8,子类如何调用父类的拷贝构造函数和赋值运算符
   子类会默认调用父类的拷贝构造函数 和 赋值运算符
  一旦自定义了拷贝构造 和 赋值运算符 则必须显示的调用父类拷贝构造和赋值运算符。
9,名字隐藏
  当子类继承了父类的数据,如果子类中定义了和父类重名的数据,则子类的数据会覆盖掉父类的。
  如何使用父类的数据   父类名::
10,多重继承的语法
 class C:public A,public B{};
11,多重继承引入的问题的解决
  a,命名冲突的解决
 使用父类名::
    名字隐藏机制 
  b,子类重复继承父类的同名数据
   可以采用虚继承-----解决菱形继承(多个类有共同父类和共同子类)
// -----------------------------------
多态
  1,多态的概念 和 分析
   一个父类对象的指针或者引用 执行或者引用子类对象时,调用父类型中定义的虚函数时,函数的表现会是相应的子类的实现。
   继承是构成多态的基础,父类的指针和引用指向子类对象是前置条件,虚函数是构成多态的关键。
  2,多态举例
  3,虚函数在子类中覆盖父类的实现时,必须遵守函数重写的规则(overwrite)
    函数名,参数列表,返回值都必须相同 访问权限没有限制
  4,多态的应用
  为了写出通用性代码
  函数的参数  函数的返回值
  5,多态的本质
  虚函数表
  对象的首地址 指向一个 存有虚拟函数地址的 虚拟函数表
  6,运行时识别
    a. typeid(类型)
       typeid(对象)
      typeinfo
      name  取得类型名字
         ==  判断两个typeinfo 是否相等 判断类型是否一致
         !=  判断两个typeinfo 是否不等
     #include<typeinf>
    b,dynamic_cast<类型>(对象)
       static_cast<类型>(对象)
      静态类型转换  转换之后无法判断是否转换成功,动态类型转换 可以判断是否类型转换成功,指针为空,代表转换失败。指针不为空 代表转换成功。
 7,抽象类
  具备纯虚函数的类叫抽象类
  virtual void foo()=0;
   抽象类不能实例化
   抽象类除了不能实例化之外 和一个普通的类没有任何失败。
   如果一个类中除了构造函数 析构函数 外所有的函数都是纯虚函数 这种类叫纯抽象类。
 如果子类继承了抽象类,不去实现纯虚函数则子类成为抽象类。
 8,如果一个父类指针指向一个子类对象 则 delete 父类对象指针 会调用父类对象的析构函数 ,子类析构的行为是不确定的
   父类对象的指针 = new 子类型();
   把父类的析构函数作成虚析构函数
  当父类中有虚函数时,则把析构函数作成虚函数

//=============================================================
C++ 中的IO
命令行进行输入输出
cin(istream) cout(ostream)
#include<iostream>

文件的输入输出
ifstream  文件读
ofstream  文件写
iofstream  既能读也能写
#include<fstream>

字符串的操作
istringstream
ostringstream
#include<sstream>

格式化IO  和 非格式化 IO
格式化:考虑类型   非格式化:字节处理,不考虑类型
get()得到一个字符  put()输出一个字符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章