c++笔记总结5.26

9.4 纯虚函数和抽象类
 纯虚函数是一种特殊的虚函数,在基类中声明纯虚函数,不给出其具体实现,在派生类中给出具体实现,基类中的纯虚函数只是一个入口。
  virtual 函数类型 函数名(参数表)=0;
 包含纯虚函数的基类称为抽象类
说明:
(1)可以定义抽象类的指针/引用,从而实现动态多态
(2)但抽象类不能建立对象、不能作为函数返回类型、不能作为函数参数的类型、不能用于强制类型转换,只能作为其他类的基类来使用(因为纯虚函数没有具体的实现)

例:

class  point { /*……*/ } ;
class  shape ;         // 抽象类
{ point  center ;
     ……
 public :
 point  where ( ) { return  center ; }
 void  move ( point p ) {center = p ; draw ( ) ; }
 virtual  void  rotate ( int ) = 0 ;        // 纯虚函数
 virtual  void  draw ( ) = 0 ;            // 纯虚函数
} ;
     …...
shape  x ;            // error,抽象类不能建立对象
shape  *p ;        // ok,可以声明抽象类的指针
shape  f ( ) ;        // error, 抽象类不能作为函数返回类型
void  g ( shape ) ;        // error, 抽象类不能作为传值参数类型

int  & h ( shape &) ;    // ok,可以声明抽象类的引用


(3)区分:空函数 函数体为空
 把函数名赋予0,本质上将指向函数体的指针赋为初值0
 在没有重新定义这种纯虚函数之前,是不能调用这种函数的
(4)不允许从具体类(不含纯虚函数的)派生出抽象类
(5)抽象类可以包含普通成员函数/虚函数,虽然不能声明抽象类的对象,但可以通过派生类的对象来调用这些不是纯虚函数的函数
(6)抽象类的构造函数和析构函数不能调用纯虚函数
(7)!!
从抽象类派生出新类之后,如果派生类给出所有纯虚函数的实现,则这个派生类就不再是抽象类;否则,这个派生类仍然是抽象类,这样的派生类也是不能产生对象的
综上所述,抽象类的唯一用途是派生类提供基类,纯虚函数的作用是作为派生类的成员函数的基础,并实现动态多态。

class  A{
protected:    int x;
public:    A(){x =1000;}  
   virtual void  print()=0;  //定义纯虚函数
};
class B:public A{  //派生类
private:   int y;
public:    B(){ y=2000;}
      void  print(){cout <<“y=”<<y<<‘\n’;}//重新定义纯虚函数
};    
class C:public A{   //派生类
   int z;
public:    C(){z=3000;}
      void  print(){cout <<“z=”<<z<<‘\n’;}//重新定义纯虚函数
};
void  main(void )
{   A  *pa;    
    B  b;
    C  c;    
   pa=&b;   
   pa->print();    
   pa=&c;    
   pa->print();
   A  a;     
   pa=&a;       
   pa->print( );//抽象类只能作为其他类的基类来使用,不能建立抽象类对象,其纯虚函数的实现由派生类给出。
}

//运行结果:y=2000
//        z=3000

第11章 输入输出流
补充:C++重建自己的输入输出系统,目的:可以对用户自定义类型进行输入输出
11.1 流类和流对象
1、基本概念
 C++将数据从一个对象到另一个对象的流动抽象为流(输入流、输出流)
 实现设备之间交换信息的类称为流类
 用流类定义的对象称为流对象 cin cout
 按照面向对象方法组织的多个流类按层次结构构成的集合称为I/O流类库,简称流库
2、流的种类
 第一种分类方法:
   文本流:一串ASCII字符
   二进制流:一串二进制数组成
 12
  文本流:31H 32H
  二进制流:00001100
  源程序文件和文本文件在传送时采用文本流
  通常,文本流在不同设备之间进行传递时可能要做一些变换
  二进制流在数据传送时不需做任何变换
 第二种分类方法:
   缓冲流:
     系统在内存开辟的临时存放输入/输出流信息的内存区,称为缓冲区
     对于缓冲流,只有当缓冲区满的时候或当前送入的数据为新一行数据时,系统才对流中的数据进行处理刷新
   非缓冲流:
    一旦数据送入流中,立即进行处理
 3、C++流库的基本结构
   C++流库中有两个平行的基类:
     streambuf类作为输入输出操作在物理设备一方的接口,负责底层操作
     ios类作为输入输出操作在用户一方的接口,负责高层的操作
 4、头文件
  iostream
  iomanip
  fstream

11.2 标准流和流操作
 1、标准流对象简称为标准流
  是C++预定义的对象 提供内存与外设之间的数据交换
 2、通过流类中定义的公有成员函数进行流操作
 3、cin istream类的对象,标准输入流
        默认连接键盘,可以重定向
    cout ostream类的对象,标准输出流
         默认连接显示器,可以重定向
    cerr ostream类的对象,标准错误输出流
         连接显示器,不能重定向
    clog ostream类的对象,标注错误输出流
         连接打印机,不能重定向
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是蒸的c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值