纯虚函数和抽象类

来源:互联网 发布:弗洛伊德算法 例子 编辑:程序博客网 时间:2024/06/04 00:54
语法基础:
#include <iostream>using namespace std;////面向抽象类编程(面向一套预先定义好的接口编程)//解耦合 ....模块的划分class  Figure //抽象类{public://阅读一个统一的界面(接口),让子类使用,让子类必须去实现virtual void getArea() = 0 ; //纯虚函数protected:private:};class Circle : public Figure{public:Circle(int a, int b){this->a = a;this->b = b;}virtual void getArea(){cout<<"圆形的面积: "<<3.14*a*a<<endl;;}private:int a;int b;};class Tri : public Figure{public:Tri(int a, int b){this->a = a;this->b = b;}virtual void getArea() {cout<<"三角形的面积: "<<a*b/2<<endl;;}private:int a;int b;};class Square : public Figure{public:Square(int a, int b){this->a = a;this->b = b;}virtual void getArea() {cout<<"四边形的面积: "<<a*b<<endl;;}private:int a;int b;};void objplay(Figure *base){base->getArea(); //会发生多态}void main511(){//Figure f; //抽象类不能被实例化Figure *base = NULL; //抽象类不能被实例化Circle c1(10, 20);Tri t1(20, 30);Square s1(50, 60);//面向抽象类编程(面向一套预先定义好的接口编程)objplay(&c1);objplay(&t1);objplay(&s1);//c1.getArea();cout<<"hello..."<<endl;system("pause");return ;}





抽象类的实例

#include <iostream>using namespace std;/*编写一个C++程序, 计算程序员( programmer )工资1 要求能计算出初级程序员( junior_programmer ) 中级程序员 ( mid_programmer )高级程序员( adv_programmer)的工资2 要求利用抽象类统一界面,方便程序的扩展, 比如:新增, 计算 架构师 (architect ) 的工资*/class programmer{public:virtual void getSal() = 0;};class junior_programmer : public programmer{public:junior_programmer(char *name, char *job, int sal){this->name = name;this->job = job;this->sal = sal;}virtual void getSal(){cout<<name<<" " << job << " : " << sal <<endl;}private:char *name;char *job;int sal;};//zhong class mid_programmer : public programmer{public:mid_programmer(char *name, char *job, int sal){this->name = name;this->job = job;this->sal = sal;}virtual void getSal(){cout<<name<<" " << job << " : " << sal <<endl;}private:char *name;char *job;int sal;};//adv_programmerclass adv_programmer : public programmer{public:adv_programmer(char *name, char *job, int sal){this->name = name;this->job = job;this->sal = sal;}virtual void getSal(){cout<<name<<" " << job << " : " << sal <<endl;}private:char *name;char *job;int sal;};//class architect : public programmer {public:architect(char *name, char *job, int sal){this->name = name;this->job = job;this->sal = sal;}virtual void getSal(){cout<<name<<" " << job << " : " << sal <<endl;}private:char *name;char *job;int sal;};//计算函数 简单的框架void CalProgSal(programmer *base){base->getSal();}void main(){junior_programmer jp("小王", "初级", 4000);mid_programmer mp("小张", "中级", 8600);adv_programmer ap("小李", "高级", 15000);//系统扩展architect ar("传智高水平学员", "架构师", 24000);CalProgSal(&jp);CalProgSal(&mp);CalProgSal(&ap);CalProgSal(&ar);cout<<"hello..."<<endl;system("pause");return ;}

原创粉丝点击