原创 c++抽象类

2011-3-26 22:29 2234 7 7 分类: 工程师职场

#include <stdlib.h>
#include <iostream>

using namespace std;

class AbstractClass {
public:
AbstractClass()
{
}
virtual ~AbstractClass()
{
}
virtual void toString() = 0;
};


class SubClass : public AbstractClass
{
public:
SubClass() : AbstractClass()
{
}
public:
~SubClass()
{
}
public:
void toString()
 {
cout << "Sub::toString()\n";
}
};


int main()
{
SubClass s;
AbstractClass &c = s;
c.toString();
return (0);
}

/***********************************************************/
/***********************************************************/
1--------------------------------------------------
用=0作为初始式使虚函数成为“纯虚函数”;
如果一个类里存在一个或者几个纯虚函数,这个类就是“抽象类”:
class Shape {        // 抽象类
public:
       virtual void rotate(int) = 0;
       virtual void draw() = 0;
       virtual bool is_closed() = 0;
       // ...
};

2--------------------------------------------------
不能创建抽象类的对象:
Shape s;        // 错误:抽象类Shape的变量

3--------------------------------------------------
抽象类只能做界面,作为其他类的基类:
class Point { /* ... */ };

class Circle : public Shape {
public:
       void rotate(int) { }                   // 覆盖Shape::rotate
       void draw();                          // 覆盖Shape::draw
       bool is_closed() { return true; }     // 覆盖Shape::is_closed

       Circle(Point p, int r);
private:
       Print center;
       int radius;
};

4--------------------------------------------------
一个未在派生类里定义的纯虚函数仍旧还是一个纯虚函数,这种情况使该派生类仍为一个抽象类:
class Polygon : public Shape {                 // 抽象类
public:
       bool is_closed() { return true;}        // 覆盖Shape::is_closed
       // ......draw和rotate尚未覆盖......
};

Polygon b;        // 错误:声明的是抽象类Polygon对象

class Irregular_polygon : public Polygon {
       list lp;
public:
       void draw();              // 覆盖Shape::draw
       void rotate(int);        // 覆盖Shape::rotate
       // ...
};

Irregular_polygon poly(some_points);        // 可以(假定有合适的构造函数)

5--------------------------------------------------
抽象类的最重要用途就是提供一个界面,而又不暴露任何实现细节:
class Charater_devece {
public:
       virtual int open(int opt) = 0;
       virtual int close(int opt) = 0;
       virtual int read(char* p), int n) = 0;
       virtual int write(const char* p, int n) = 0;
       virtual int ioctl(int ...) = 0;
       virtual ~Charater_device() { }        // 虚析构函数
};
我们随后可以将驱动程序描述为由Charater_device派生的类,并经由这个界面去操作各种各样的驱动程序

 

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /5 下一条