作业要求:
程序代码:
#include <iostream>using namespace std;class Animal
{
private:string name;string color;int *age;
public://无参构造函数Animal(){cout << "Animal::无参构造函数" << endl;}//有参构造函数Animal(string name,string color,int age):name(name),color(color),age(new int(age)){cout << "Animal::有参构造函数" << endl;}//析构函数~Animal(){delete age;cout << "Animal::析构函数" << endl;}//拷贝构造函数Animal(const Animal &other):name(other.name),color(other.color),age(new int(*other.age)){cout << "Animal::拷贝构造函数" << endl;}//拷贝赋值函数Animal &operator=(const Animal &other){if(this !=&other){name = other.name;color = other.color;age = new int(*other.age);}cout << "Animal::拷贝赋值函数" << endl;return *this;}};
class Dog:public Animal
{
private:int *legs;
public://无参构造函数Dog(){cout << "Dog::无参构造" << endl;}//有参构造函数Dog(int legs,string name,string color,int age):Animal(name,color,age),legs(new int(legs)){cout << "Dog::有参构造函数" << endl;}//析构函数~Dog(){delete legs;cout << "Dog::析构函数" << endl;}//拷贝构造函数Dog(const Dog &other):Animal(other),legs(new int(*other.legs)){cout << "Dog::拷贝构造构造" << endl;}//拷贝赋值函数Dog &operator=(const Dog &other){if(this != &other){Animal::operator=(other);legs = new int(*other.legs);}cout << "Dog::拷贝赋值函数" << endl;return *this;}void speak(){cout << "汪汪汪" << endl;}
};
int main()
{Dog d1;//实例化d1对象 不初始化 走无参构造Dog d2(4,"xiaohuang","yellow",3);//实例化d2 并初始化Dog d3(d2);//实例化d3 并使用d2给其初始d1 = d3; //将d3 赋值给d1d1.speak();d2.speak();d3.speak();return 0;
}
运行结果:
作业要求:
程序代码:
#include <iostream>using namespace std;//封装一个 讲解动物 类
class Animal
{
public:Animal(){}virtual void perform() = 0;
};//封装一个 狮子 类 公有继承Animal
class Lion:public Animal
{
private:string name;
public:Lion(){}Lion(string name):name(name){}//重写虚函数void perform(){cout << name << ":跳舞" << endl;}
};
//封装一个 大象 类 共有继承Animal
class Elephant:public Animal
{
private:string name;
public:Elephant() {}Elephant(string name):name(name){}//重写虚函数void perform(){cout << name << ":唱歌" << endl;}
};//封装一个 猴子 类 共有继承Animal
class Monkey:public Animal
{
private:string name;
public:Monkey(){}Monkey(string name):name(name){}//重写虚函数void perform(){cout << name << ":杂耍" << endl;}
};int main()
{//狮子类实例化一个对象 并初始化Lion l1("狮子");//使用基类指针 指向狮子子类对象l1Animal *p =&l1;p->perform();//展开狮子子类功能//大象类实例化对象Elephant e1("大象");p = &e1;p->perform();//猴子实例化对象Monkey m1("猴子");p = &m1;p->perform();return 0;
}
运行结果: