C++面向对象入门(二十六)赋值兼容规则

赋值兼容规则:在公有继承的情况下,一个派生类的对象可以作为基类对象使用
1 派生类对象可以赋值给基类对象
2 派生类对象的地址可以赋值指向基类对象的指针
3 派生类对象可以初始化基类的引用

 

代码示例:

#include<iostream>
using namespace std;

/*
赋值兼容规则:在公有继承的情况下,一个派生类的对象可以作为基类对象使用
1 派生类对象可以赋值给基类对象
2 派生类对象的地址可以赋值指向基类对象的指针
3 派生类对象可以初始化基类的引用
*/

class Biologically;
class Rider;

class Rider
{
protected:
    string name;
    double kickValue;
    double punchValue;
    string driver;
    string model;
    double HP;
    double power;
    double defend;
public:
    Rider(string, string, string, double, double);
    virtual void riderKick(Biologically bio);
    virtual void riderPunch(Biologically bio);
    void kickAndPunch()
    {
        cout << "Base Member kick value:" << kickValue << ", punch value:" << punchValue << endl;
    }
};

class ZeroOne: public Rider
{
public:
    string dad;

    ZeroOne(string name, string model, string driver, double kv, double pv) :Rider(name, model, driver, kv, pv) { dad = "Hiden Sereo";  }

    void realizing()
    {
        model = "Realizing Hopper";
        kickValue = 114.7;
        punchValue = 59.1;
    }

};

class Biologically
{
public:
    double HP;
    Biologically():HP(10000000){}
    ~Biologically()
    {
        cout << "Biologically died!";
    }
};

void Rider::riderKick(Biologically bio)
{
    bio.HP -= kickValue * 1000 * 10000;
    if (bio.HP < 0)
        delete &bio;
}

void Rider::riderPunch(Biologically bio)
{
    bio.HP -= kickValue * 1000 * 5000;
    if (bio.HP < 0)
        delete &bio;
}
Rider::Rider(string name,string model,string driver, double kv, double pv):name(name), model(model),driver(driver),kickValue(kv),punchValue(pv)
{}


int main()
{
    Biologically bio;
    Rider rider("Zio", "one phase", "Tokiwa Sougo", 19.0, 8.2);
    ZeroOne aruto("Zero One", "Rising Hopper", "Hiden Aruto", 27.2, 8.9);
    //使用子类对象给基类变量赋值并访问基类成员
    rider.kickAndPunch();
    aruto.kickAndPunch();
    rider = aruto;
    rider.kickAndPunch();
    //派生类对象的地址复制给基类指针变量并访问基类成员
    Rider *r1 = &aruto;
    r1->kickAndPunch();
    //派生类用于基类引用初始化并访问基类成员
    Rider &r2 = aruto;
    r2.kickAndPunch();
    system("pause");
    return 0;
}

 

posted @ 2020-08-31 19:00  DNoSay  阅读(498)  评论(0编辑  收藏  举报