一、思维导图
二、练习
1、
#include <iostream>
using namespace std;
class Animal
{
private:
string name;
string color;
int *age;
public:
//无参构造函数
Animal() {}
//有参构造函数
Animal(string name,string color,int age):name(name),color(color),age(new int(age))
{}
//析构函数
~Animal()
{
delete age;
}
//拷贝构造函数
Animal(const Animal &other):name(other.name),color(other.color),age(new int(*other.age))
{}
//拷贝赋值函数
Animal &operator=(const Animal &other)
{
name=other.name;
color=other.color;
age=new int(*other.age);
return *this;
}
void show()
{
cout << "姓名:" << name << endl;
cout << "颜色:" << color << endl;
cout << "年龄:" << *age << endl;
}
};
class Dog :public Animal
{
private:
int count;
public:
void speak()
{
cout << "狗叫" << endl;
}
//无参构造函数
Dog() {}
//有参构造函数
Dog(int count,string name,string color,int age):Animal(name,color,age),count(count)
{}
//拷贝构造函数
Dog(const Dog &other):Animal(other),count(other.count)
{}
//拷贝赋值函数
Dog &operator=(const Dog &other)
{
count=other.count;
Animal::operator=(other);
return *this;
}
void show()
{
cout << "几条腿:" << count << endl;
Animal::show();
}
};
int main()
{
Dog d1;
Dog d2(4,"小黄","黄色",2);
Dog d3(d2);
d1=d3;
d1.show();
cout << "************ " << endl;
d2.show();
cout << "************ " << endl;
d3.show();
return 0;
}
2、
#include <iostream>
using namespace std;
class Commentator
{
private:
string name;
public:
Commentator() {}
Commentator(string name):name(name) {}
virtual void perform()=0;
};
class Lion:public Commentator
{
private:
string var;
public:
Lion() {}
Lion(string var):var(var) {}
//虚函数
void perform()
{
cout << "狮子的动物特点:" << var << endl;
}
};
class Elephont:public Commentator
{
private:
string var;
public:
Elephont() {}
Elephont(string var):var(var) {}
//虚函数
void perform()
{
cout << "大象的动物特点:" << var << endl;
}
};
class Moneky:public Commentator
{
private:
string var;
public:
Moneky() {}
Moneky(string var):var(var) {}
//虚函数
void perform()
{
cout << "猴子的动物特点:" << var << endl;
}
};
int main()
{
Lion L("爱吃肉");
Commentator *p=&L;
p->perform();
Elephont E("爱吃素");
Commentator *q=&E;
q->perform();
Moneky M("爱吃香蕉");
Commentator *t=&M;
t->perform();
return 0;
}