zoukankan      html  css  js  c++  java
  • 抽象类 纯虚函数

     1 #include <iostream>
     2 using namespace std;
     3 /************************************************************************/
     4 /*抽象类不能定义对象,为了强调一个类为抽象类,可将该类的构造函数说明为保护的访问控制权限 
     5 抽象类只用作基类,其纯虚函数的实现由派生类给出
     6 如果派生类定义了纯虚函数,该派生类就可以当做具体类,不定义仍然是抽象类
     7 /************************************************************************/
     8 class point //抽象类: 带有纯虚函数的类为抽象类
     9 {
    10 public:
    11     point(int i=0,int j=0)
    12     {
    13         x0=i;
    14         y0=j;
    15     }
    16     virtual void set()=0;  //纯虚函数 在基类中不对函数做有意义的实现,将它说明为纯虚函数,其实现留给基类的派生类去做 virtual <函数类型><函数名><(参数表)>=0
    17     virtual void draw()=0;
    18 
    19 protected:
    20     int x0,y0;
    21 };
    22 
    23 class line:public point    //line为抽象类point的派生类,并重新定义了基类的纯虚函数
    24 {
    25 public:
    26     line(int i=0,int j=0,int m=0,int n=0):point(i,j)
    27     {
    28         x1=m,y1=n;
    29     }
    30     void set()
    31     {
    32         cout<<"line::set() called.
    ";
    33     }
    34     void draw()
    35     {
    36         cout<<"line::draw() called.
    ";
    37     }
    38 protected:
    39     int x1,y1;
    40 };
    41 
    42 
    43 class ellipse:public point
    44 {
    45 public:
    46     ellipse(int i=0,int j=0,int p=0,int q=0):point(i,j)
    47     {
    48         x2=p,y2=q;
    49     }
    50     void set()
    51     {
    52         cout<<"ellipse::set() called.
    ";
    53     }
    54     void draw()
    55     {
    56         cout<<"ellipse::draw() called.
    "; 
    57     }
    58 protected:
    59     int x2,y2;
    60 };
    61 void drawobj(point *p)
    62 {
    63     p->draw();
    64 }
    65 void setobj(point *p)
    66 {
    67     p->set();
    68 }
    69 void main()
    70 {
    71     line *lineobj=new line;
    72     ellipse *elliobj=new ellipse;
    73     drawobj(lineobj);
    74     drawobj(elliobj);
    75     cout<<endl;
    76     setobj(lineobj);
    77     setobj(elliobj);
    78     cout<<"
    Redraw the object...
    ";
    79     drawobj(lineobj);
    80     drawobj(elliobj);
    81     system("pause");
    82 }
    83 /*纯虚函数只能作为基类来使用,其纯虚函数的实现是由派生类给出的。
    84 如果派生类没有重新定义纯虚函数,而只是集成基类的纯虚函数,则这个派生类仍然还是一个抽象类,不能直接使用
    85 */
  • 相关阅读:
    常用排序算法
    多线程基础知识 转
    转 大型项目架构演进过程
    TCP/IP 思维导图
    Java8 List字符串 去重
    docker lnmp php
    jpa 批量插入
    备忘提醒
    IntelliJ IDEA像Eclipse一样打开多个项目(转)
    IntelliJ Idea 常用快捷键列表
  • 原文地址:https://www.cnblogs.com/qiwu1314/p/9070853.html
Copyright © 2011-2022 走看看