当前位置: 移动技术网 > IT编程>开发语言>C/C++ > c++-多态的练习

c++-多态的练习

2019年12月22日  | 移动技术网IT编程  | 我要评论

多态的几个小练习

练习一

#include <iostream>
#include <string>
using namespace std;


class fu
{
public:
    fu(string name)
    {
        this->name = name;
    }
    virtual void func()
    {
        cout << "调用了fu的函数"<<endl;
        cout<<"fu " << name <<" func()"<< endl;

    }
    string name;
};
class zi :public fu
{
    public:
    zi(string name):fu(name)
    {
    }
    void func()
    {
        cout << "调用了zi的函数" << endl;
        cout << "zi " << name << " func()"<< endl;
    }
    
};
class zi2 :public fu
{
    public:
    zi2(string name) : fu(name)
    {
        

    }
    void func()
    {
        cout << "调用了zi2的函数" << endl;
        cout << "zi2 "<< name << " func()" << endl;
    }
};
class sun :public zi
{
    public:
    sun(string name) : zi(name)
    {
    }
    void func()
    {
        cout << "调用了sun的函数" << endl;
        cout << "sun " << name << " func()"<<endl;
    }

};
void fun(fu &f)
{
    f.func();//在此处应该发生多态

}
int main()
{
    fu f("ffff");
    zi z("zzzz");
    zi2 z2("tttt");
    sun s("ssss");
    fun(f);
    fun(z);
    fun(z2);
    fun(s);
    return 0;
}

练习二

#include <iostream>
#include <string>
using namespace std;


class fu
{
public:
    fu(string name)
    {
        this->name = name;
    }
    virtual void func()
    {
        cout << "调用了fu的函数"<<endl;
        cout<<"fu " << name <<" func()"<< endl;

    }
    string name;
};
class zi :public fu
{
    public:
    zi(string name):fu(name)
    {
    }
    void func()
    {
        cout << "调用了zi的函数" << endl;
        cout << "zi " << name << " func()"<< endl;
    }
    
};
class zi2 :public fu
{
    public:
    zi2(string name) : fu(name)
    {
        

    }
    void func()
    {
        cout << "调用了zi2的函数" << endl;
        cout << "zi2 "<< name << " func()" << endl;
    }
};
class sun :public zi
{
    public:
    sun(string name) : zi(name)
    {
    }
    void func()
    {
        cout << "调用了sun的函数" << endl;
        cout << "sun " << name << " func()"<<endl;
    }

};
void fun(fu &f)
{
    f.func();//在此处应该发生多态

}
int main()
{
    fu f("ffff");
    zi z("zzzz");
    zi2 z2("tttt");
    sun s("ssss");
    fun(f);
    fun(z);
    fun(z2);
    fun(s);
    return 0;
}

练习三

#define _crt_secure_no_warnings
#include <iostream>
#include <string>
using namespace std;

//把大象关进冰箱
//冰箱类
class icebox
{
protected:
    int size;//冰箱的容积
public:
    icebox(int size)
    {
        this->size = size;
    }
    virtual int getsize()
    {
        return this->size;
    }
};

class animal
{
protected:
    int size;
public:
    animal(int size)
    {
        this->size = size;
    }
    virtual int getsize()
    {
        return this->size;
    }

};
//大象类
class elephent:public animal
{
private:
    string name;
public:
    elephent(int size, string name) :animal(size)
    {
        this->name = name;
    }
    virtual int getesize()
    {
        return this->size;
    }
    string getname()
    {
        return this->name;
    }
};

class geli:public icebox
{
private:
    string name;
public:
    
    geli(int size , string name) :icebox(size)
    {
        this->name = name;
    }
    virtual int getsize()
    {
        return this->size;
    }
    string getname()
    {
        return this->name;
    }
};

void puteleintobox(icebox *ib, animal *an)
{
    if (ib->getsize() > an->getsize())
    {
        cout << "把动物装进去了" << endl;
    }
    else
    {
        cout << "动物卡住了" << endl;
    }
}
int main()
{
    
    icebox ib(100);
    animal an(200);


    puteleintobox(&ib, &an);

    elephent *ep = new elephent(200, "非洲象");
    geli *dongmz = new geli(300, "geli");

    puteleintobox(dongmz, ep);
    system("pause");
    return 0;
}

练习四

#define _crt_secure_no_warnings
#include"iostream"
using namespace std;

class programmer
{
public:
    virtual int salarypermonth()=0;
    virtual char * getname()=0;
};

class cppprogrammer :public programmer
{
public:
    virtual int salarypermonth()
    {
        return 20000;
    }
    virtual char *  getname()
    {
        return "cppprogrammer";
    }

};

class phpprogrammer :public programmer
{
public:
    virtual int salarypermonth()
    {
        return 10000;
    }
    virtual char *  getname()
    {
        return "phpprogrammer";
    }

};

class javaprogrammer :public programmer
{
public:
    virtual int salarypermonth()
    {

        return 15000;
    }
    virtual char *  getname()
    {
        return "javaprogrammer";
    }
};

class girl
{
public:
    virtual int beauty()
    {

    }
    virtual char *  getname() {

    }

};

class baifumei : public girl
{
public:
    virtual int beauty()
    {
        return 19999;
    }
    virtual char *  getname()
    {
        return "baifumei";
    }


};

class nvdiaosi : public girl
{
public:
    virtual int beauty()
    {
        return 11000;
    }
    virtual char *  getname()
    {
        return "nvdiaosi";
    }


};

class fengjie : public girl
{
public:
    virtual int beauty()
    {
        return 14000;
    }
    virtual char *  getname()
    {
        return "fengjie";
    }

};



void marry(programmer &pp, girl &gg)
{
    if (pp.salarypermonth() > gg.beauty())
    {
        cout << pp.getname() << "\t"<<"will marry   "<<gg.getname() << endl;
    }
    else

    {
        cout << "hey  " << pp.getname() << "  don't make a day dream! you want to marry to  " << gg.getname() <<"??"<< endl;
    }
}

int main()
{
    cppprogrammer cpp;
    phpprogrammer php;
    javaprogrammer java;
    baifumei bfm;
    nvdiaosi nds;
    fengjie fj;
    marry(cpp, bfm);
    marry(php, bfm);
    marry(java, bfm);

    marry(php, nds);
    marry(java, bfm);

    
    marry(java, fj);

    system("pause");
    return 0;
}

练习五

#define _crt_secure_no_warnings
#include"iostream"
using namespace std;

class programmer
{
public:
    virtual int salarypermonth()=0;
    virtual char * getname()=0;
};

class cppprogrammer :public programmer
{
public:
    virtual int salarypermonth()
    {
        return 20000;
    }
    virtual char *  getname()
    {
        return "cppprogrammer";
    }

};

class phpprogrammer :public programmer
{
public:
    virtual int salarypermonth()
    {
        return 10000;
    }
    virtual char *  getname()
    {
        return "phpprogrammer";
    }

};

class javaprogrammer :public programmer
{
public:
    virtual int salarypermonth()
    {

        return 15000;
    }
    virtual char *  getname()
    {
        return "javaprogrammer";
    }
};

class girl
{
public:
    virtual int beauty()
    {

    }
    virtual char *  getname() {

    }

};

class baifumei : public girl
{
public:
    virtual int beauty()
    {
        return 19999;
    }
    virtual char *  getname()
    {
        return "baifumei";
    }


};

class nvdiaosi : public girl
{
public:
    virtual int beauty()
    {
        return 11000;
    }
    virtual char *  getname()
    {
        return "nvdiaosi";
    }


};

class fengjie : public girl
{
public:
    virtual int beauty()
    {
        return 14000;
    }
    virtual char *  getname()
    {
        return "fengjie";
    }

};



void marry(programmer &pp, girl &gg)
{
    if (pp.salarypermonth() > gg.beauty())
    {
        cout << pp.getname() << "\t"<<"will marry   "<<gg.getname() << endl;
    }
    else

    {
        cout << "hey  " << pp.getname() << "  don't make a day dream! you want to marry to  " << gg.getname() <<"??"<< endl;
    }
}

int main()
{
    cppprogrammer cpp;
    phpprogrammer php;
    javaprogrammer java;
    baifumei bfm;
    nvdiaosi nds;
    fengjie fj;
    marry(cpp, bfm);
    marry(php, bfm);
    marry(java, bfm);

    marry(php, nds);
    marry(java, bfm);

    
    marry(java, fj);

    system("pause");
    return 0;
}

练习六

#define _crt_secure_no_warnings
#include <iostream>


using namespace std;

//

class  girl
{
public:

    int  fangyu()
    {
        return 10;
    }

};


class boy
{
public:
    virtual int fight()
    {
        return 5;
    }

};

class higboy:public boy
{
public:
    virtual int fight()
    {
        return 10;
    }

};

class bugboy :public boy
{
public:
    virtual int fight()
    {
        return 20;
    }

};

//战斗方法
void catchgirl(boy &bp, girl &mp)
{
    if (bp.fight() > mp.fangyu()) { //hp->getad 发生了多态
        cout << "女孩被追到了" << endl;
    }
    else {
        cout << "没追到" << endl;
    }
}


int main(void)
{

    girl mp;

    boy b1;
    higboy b2;
    bugboy b3;

    catchgirl(b1, mp);
    catchgirl(b2, mp);
    catchgirl(b3, mp);


    // system("pause");
    return 0;
}

练习七

#define _crt_secure_no_warnings
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;


class person
{
public:
    person(char * name,int age)
    {
        this->name = name;
        this->age = age;
    }
    virtual void aryyouok()
    {
        cout << "name: " << this->name << endl;
        cout << "age: " << this->age << endl;
    }
    string getname()
    {
        return name;
    }
    int getage()
    {
        return age;
    }
private:
    string name;
    int age;
};

class teacher : public person
{
public:
    teacher(char * name, int age, int wage) :person(name, age)
    {
        this->wage = wage;
    }
    virtual void aryyouok()
    {
        person::aryyouok();
        cout << "wage:" << this->wage << endl;
    }
private:
    int wage;
};

class student:public person
{
public:
    student(char * name, int age, char * work) :person(name, age)
    {
        this->work = work;
    }
    virtual void aryyouok()
    {
        person::aryyouok();
        cout << "work:" << this->work << endl;
    }
private:
    string work;
};

void seehello(person & p)
{
    p.aryyouok();
}


int main(void)
{
    student stu("íõ¶þ¹·", 18, "ñ§ï°");

    teacher tea("°×½à",22, 8000);
    
    seehello(stu);
    cout << endl;
    seehello(tea);


    cout << endl;
    // system("pause");
    return 0;
}

练习八

#define _crt_secure_no_warnings
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;


class person
{
public:
    person(char * name,int age)
    {
        this->name = name;
        this->age = age;
    }
    virtual void aryyouok()
    {
        cout << "name: " << this->name << endl;
        cout << "age: " << this->age << endl;
    }
    string getname()
    {
        return name;
    }
    int getage()
    {
        return age;
    }
private:
    string name;
    int age;
};

class teacher : public person
{
public:
    teacher(char * name, int age, int wage) :person(name, age)
    {
        this->wage = wage;
    }
    virtual void aryyouok()
    {
        person::aryyouok();
        cout << "wage:" << this->wage << endl;
    }
private:
    int wage;
};

class student:public person
{
public:
    student(char * name, int age, char * work) :person(name, age)
    {
        this->work = work;
    }
    virtual void aryyouok()
    {
        person::aryyouok();
        cout << "work:" << this->work << endl;
    }
private:
    string work;
};

void seehello(person & p)
{
    p.aryyouok();
}


int main(void)
{
    student stu("íõ¶þ¹·", 18, "ñ§ï°");

    teacher tea("°×½à",22, 8000);
    
    seehello(stu);
    cout << endl;
    seehello(tea);


    cout << endl;
    // system("pause");
    return 0;
}

练习九

#define _crt_secure_no_warnings
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;


class person
{
public:
    person(char * name,int age)
    {
        this->name = name;
        this->age = age;
    }
    virtual void aryyouok()
    {
        cout << "name: " << this->name << endl;
        cout << "age: " << this->age << endl;
    }
    string getname()
    {
        return name;
    }
    int getage()
    {
        return age;
    }
private:
    string name;
    int age;
};

class teacher : public person
{
public:
    teacher(char * name, int age, int wage) :person(name, age)
    {
        this->wage = wage;
    }
    virtual void aryyouok()
    {
        person::aryyouok();
        cout << "wage:" << this->wage << endl;
    }
private:
    int wage;
};

class student:public person
{
public:
    student(char * name, int age, char * work) :person(name, age)
    {
        this->work = work;
    }
    virtual void aryyouok()
    {
        person::aryyouok();
        cout << "work:" << this->work << endl;
    }
private:
    string work;
};

void seehello(person & p)
{
    p.aryyouok();
}


int main(void)
{
    student stu("íõ¶þ¹·", 18, "ñ§ï°");

    teacher tea("°×½à",22, 8000);
    
    seehello(stu);
    cout << endl;
    seehello(tea);


    cout << endl;
    // system("pause");
    return 0;
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网