zoukankan      html  css  js  c++  java
  • 第十七章 特殊成员_类的函数指针 简单

    #include <iostream>
    using namespace std;
    class Human
    {
    public:
    		virtual void run()=0;
    	    virtual void eat()=0;
    };
    
    class Month:public Human
    {
    public:
    	void run(){ cout<<"母亲跑百米要二十少"<<endl;}
    	void eat(){ cout<<"母亲喜欢吃零食"<<endl;}
    };
    
    class Father:public Human
    {
    public:
    	void run(){ cout<<"父亲跑百米要三十少"<<endl;}
    	void eat(){ cout<<"父亲不喜欢吃零食"<<endl;}
    };
    
    class Uncle:public Human
    {
    public:
    	void run(){ cout<<"舅舅跑百米要十五少"<<endl;}
    	void eat(){ cout<<"舅舅吃零食"<<endl;}
    };
    
    
    int main()
    {
       void (Human::*pf)()=0;
       Human *p =0;
       char choice1, choice2;
       bool quit = false;
       while(quit == false)
       {
            cout<<"(0)退出 (1)母亲 (2)父亲 (3)舅舅"<<endl;
    		cin>>choice1;
    		switch(choice1)
    		{
    		case '0':
    			 quit=true;
    			 break;
    		case '1':
    			 p = new Month;
    			 break;
    		case '2':
    			 p = new Father;
    			 break;
    		case '3':
    			 p = new Uncle;
    			 break;
    		default:
    			 choice1='q';
    			 break;
    		}
    		if(quit)
    		{
    		     break;
    		}
    		if(choice1=='q')
    		{
    		     cout<<"请输入0到3之间的数字"<<endl;
    			 continue;
    		}
    		cout<<"(1)跑步 (2)进食"<<endl;
    		cin>>choice2;
    		switch(choice2)
    		{
    			case '1':
    				pf=&Human::run;
    				break;
    			case '2':
    				pf = &Human::eat;
    				break;
    			default:
    				continue;
    		}
    		//p指向的是一个类
    		//pf是指向一个类的函数指针
    		(p->*pf)();
    		 delete p;
       }
       return 0;
    }
    

      

  • 相关阅读:
    细说进程、应用程序域与上下文之间的关系
    sql server2008添加登录账户配置权限 && 登录时18456错误
    Sql CLR
    设计模式学习篇(一)
    常用实用方法
    OOP 6大基本原则
    如何成为一个优秀的程序员
    家庭网络
    反射
    ADO.Net 事务操作
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2689863.html
Copyright © 2011-2022 走看看