55,C++(09)

来源:互联网 发布:知乎 短句 编辑:程序博客网 时间:2024/05/16 17:16

/*
达内学习 C++ day53 2013-11-15
*/
1,多态的概念和分析
 当父类对象的指针或引用指向子类对象时,调用父类型中定义的虚函数,调用的表现会是相应的子类的实现。
  继承是多态的基础,父类对象的指针或引用是多态的前置条件,虚函数是关键。
2,多态的举例
3,函数的重写;
  虚函数的重写(overwrite);
  参数列表和返回值都必须相同(权限没有限制);
  异常不能抛出更大或者更多;
4,多态的应用
  通用性编程(函数的参数函数的返回值)
5,多态的本质
 虚函数表
6,运行时识别
 a.typeid  返回一个类型信息 或者  一个对象的类型信息
 type_info -----------#include<typeinfo>
  name()类型名字  ==类型相等   !=类型不等
  识别多态类型 必须满足多态要求
  b.dynamic_cast<类型>(对象)
    static_cast<类型>(对象)
    具备多态性的类型转换  必须使用dynamic_cast 如果成功返回合法地址,不成功返回 NULL,引用类型转换不成功抛出异常;
   static_cast 无论是否合法都会返回合法地址
7,抽象类
  具备纯虚函数的类  叫抽象类
  抽象类不能实例化 除此之外和其他类没有区别
 如果一个类继承了一个抽象类没有实现纯虚函数 还是抽象类
virtual void show() = 0;
8,虚析构函数
 当一个类中有虚函数时,就把析构函数定义成虚析构函数。
  为确保子类的析构函数会调用。
//====================================================
C++中的io
1,c++ io的分类
针对控制台   #include<iostream>
istream   ostream
cin        cout
针对文件    #include<fstream>
ifstream   ostream   fstream
针对字符串   #include<sstream>
istringstream   ostringstream
2,非格式化io
put  get

getline() 读取一行数据  可以指定结束符号
cin.clear() 复位  纠正流的状态 但是不清空缓冲区
ignore(int n,char c = '\n') 最多忽略掉n个字符,到 c为止。
putback(char c)退回一个字符
peek()   察看一个字符,不动文件指针 相当于察看后还回
3,字符串操作
 string  c++中的字符串
 把C的字符串转换成C++ string
 string string(const char* str)
常用的运算符 == + +=  []
常用的函数  .size()   c_str()
转换成C串 string str; const char* cstr = str.c_str();

 流输入的数据最终会变成字符串
ostringstream  ostr;
ostr<<123;
数据来字字符串
istringstream  istr;
int data;
istr>>data;

当前时间对应日期2013-11-1514:25:38
char timestr[100];
 time_t t = time(0);
 struct tm* mytm = localtime(&t);
 sprintf(timestr,"%04d-%02d-%02d%02d:%02d:%02dtestfile",mytm->tm_year+1900,mytm->tm_mon+1,mytm->tm_mday,mytm->tm_hour,mytm->tm_min,mytm->tm_sec);

C++的字符串格式拼接
ostringstream ostr;
ostr<<123<<' '<<123.45<<' '<<"test";
把流对象变成字符串
string  cppstr = ostr.str();

4,文件的输入输出
ifstream(c串,模式)
ofstream(c串,模式)
fstream(c串,模式)
模式:ios::in  ios::out ios::binary ios::app
      ios::trunc(清空)  ios::ate(跳到文件尾,如果是输出流则把文件清空)
如果流对象有文件名并创建对象成功,则同时文件打开。

read(数据地址,大小);返回值都是对象
write(数据地址,大小);
gcount() 本次读取的数据量

以dog为单位进行读写

使用read write gcount 读取一个文件的内容,然后把读取到的内容 每个字节都和一个固定的随机数据^操作,然后把这个数据写入另一个文件
//----
istream   seekg  调整读取的位置
          tellg  得到读取的位置
ostream   seekp  调整写的位置
          tellp  得到写的位置
SEEK_CUR  ios::cur  ios::beg  ios::end

随机读写文件
清空文件  cat /dev/null> file
fsream
//=============
异常  exception
  系统异常
  用户自定义异常

  c++中任何类型的数据都有表示异常
如果一个类里没有虚函数  则typeid不会抛出异常,当这个类中有虚函数 并且这个类的指针指向NULL,则对这个指针指向的对象进行使用 typeid 则会抛出bad_typeid

 

原创粉丝点击