作业要求:
程序代码:
cpp
#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 赋值给d1
d1.speak();
d2.speak();
d3.speak();
return 0;
}
运行结果:
作业要求:
程序代码:
cpp
#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("狮子");
//使用基类指针 指向狮子子类对象l1
Animal *p =&l1;
p->perform();//展开狮子子类功能
//大象类实例化对象
Elephant e1("大象");
p = &e1;
p->perform();
//猴子实例化对象
Monkey m1("猴子");
p = &m1;
p->perform();
return 0;
}
运行结果: