现在的位置: 首页 > 综合 > 正文

C++_虚函数

2016年08月30日 ⁄ 综合 ⁄ 共 1508字 ⁄ 字号 评论关闭
//***** 虚函数 *****
class Father
{
public:
    virtual void run()  //virtual是C++里面的关键字,代表该函数是虚函数
    {
        std::cout << "父亲可以跑万米!" << std::endl;
    }
    void jump()
    {
        std::cout << "父亲可以跳五个台阶!" << std::endl;
    }
};

class Son:public Father
{
public:
    void run()
    {
        std::cout << "儿子可以跑十万米!" << std::endl;
    }
    void jump()
    {
        std::cout << "儿子可以跳十个台阶!" << std::endl;
    }
};

//***** 虚函数使用 *****
void test1()
{
    Father *p1 = new Son;
    p1->run();
    p1->jump();
    delete(p1);
    p1 = NULL;

    Son *p2 = new Son;
    p2->run();
    p2->jump();
    delete(p2);
    p2 = NULL;

    // run()函数在没有添加virtual关键字之前的输出:
    /*
    输出:
        父亲可以跑万米!
        父亲可以跳五个台阶!
        儿子可以跑十万米!
        儿子可以跳十个台阶!
    */

    Father *p3 = new Son;
    p3->run();
    p3->jump();
    delete(p3);
    p3 = NULL;

    Son *p4 = new Son;
    p4->run();
    p4->jump();
    delete(p4);
    p4 = NULL;

    // run()函数在添加virtual关键字之后的输出:
    /*
    输出:
        儿子可以跑十万米!
        父亲可以跳五个台阶!
        儿子可以跑十万米!
        儿子可以跳十个台阶!
    */

    /*
    虚函数:
        为什么两种的情况不相同呢,这是因为在run()函数前面加了关键字virtual,表示该函数是虚函数
        虚函数,实际上表示该函数是多种形态的,即函数可以被多个对象所拥有,而且功能不一,换句话说,就是多个对象在调用同一个名字的函数时,
        会产生不同的效果。系统在执行virtual函数时,会自动判断是哪个对象调用了它,然后调用该对象的同名函数。
    */
}

//***** 虚函数原理 *****
class player  // 选手
{
public:
    virtual void beat()
    {
        std::cout << "一般选手的力量为260磅" << std::endl;
    }
protected:
    int age;
};

class Ali:public player  // 阿里
{
public:
    void beat()
    {
        std::cout << "阿里一拳的力量为420磅" << std::endl;
    }
};

class Lewis:public player  // 刘易斯
{
public:
    void beat()
    {
        std::cout << "刘易斯一拳的力量为480磅" << std::endl;
    }
};

class Tyson:public player  // 泰森
{
public:
    void beat()
    {
        std::cout << "泰森一拳的力量为500磅" << std::endl;
    }
};

void test1()
{
    player *p[4];
    player *p1 = NULL;
    int choice;
    for(int i = 0; i < 4; i ++)
    {
        std::cout << "(1)阿里(2)刘易斯(3)泰森:";
        std::cin >> choice;
        switch(choice)
        {
            case 1:
                p1 = new Ali;
                break;
            case 2:
                p1 = new Lewis;
                break;
            case 3:
                p1 = new Tyson;
                break;
            default:
                p1 = new player;
                break;
        }
        p[i] = p1;
        p[i]->beat();
        delete(p[i]);
        p[i] = NULL;
    }
}

【上篇】
【下篇】

抱歉!评论已关闭.