学完虚函数与多态,需要多加练习巩固这一面向对象的重要特征的知识点,我就自己做了个小练习
由于想写两个人之间的关系,所以先定义一个抽象类:
class People
{
public:
People(char * name1) { name = name1;}
virtual ~People() { cout << name << " was gone" << endl; }
virtual void chase(People *) = 0; //追求方法
char * getName() { return name; }
protected:
char * name;
};
再根据定义的人类派生出男人类与女人类:
class Man:public People
{
public:
Man(char * name, People * other = NULL) :People(name) {partner = other;}
~Man() { cout << "Best wishes to u,my " << partner ->getName() << endl; partner = NULL; }
void getTogether(People * TP) override { partner = new Man(TP->getName(), this); }
void chase(People * Pname)override
{
cout << name << " loves " << Pname->getName() << endl;
partner = Pname;
Pname->getTogether(this);
}
private:
People* partner;
};
class Woman:public People
{
public:
Woman(char * name, People * other = NULL) :People(name) { partner = other; }
~Woman() { cout << "My love will go on,dear " << partner->getName() << endl; }
void getTogether(People * TP) override { partner = new Man(TP->getName(),this); }
void chase(People * Pname)override
{
cout << name << "loves" << Pname->getName() << endl;
partner = Pname;
Pname->getTogether(this);
}
private:
People* partner;
};
最后在主方法创建对象看下效果:
void main() {
People *a = new Man("Jack");
People *b = new Woman("Rose");
a->chase(b);
delete a;
delete b;
}