代码练习
封装一个动物的基类,类中有私有成员:姓名,颜色,指针成员年纪要求:分别完成基类和派生类中的:构造函数、析构函数、拷贝构造函数、拷贝赋值函数
#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))
{
cout << "父类的构造函数" << endl;
}
~animal()
{
cout << "父类的析构函数" << endl;
}
animal(const animal &other):name(other.name),color(other.color),age(new int (*other.age))
{
cout << "父类的拷贝构造函数" << endl;
}
animal &operator=(const animal &other)
{
if(this != &other)
{
name = other.name;
color = other.color;
age = new int (*other.age);
}
cout << "父类的拷贝赋值函数" << endl;
return *this;
}
};
class Dog:public animal
{
private:
int *leg_num;
public:
Dog()
{}
Dog(string name,string color,int age,int n):animal(name,color,age),leg_num(new int (n))
{
cout << "子类的构造函数" << endl;
}
~Dog()
{
cout << "子类的析构函数" << endl;
}
Dog(const Dog &other):animal(other),leg_num(new int (*other.leg_num))
{
cout << "子类的拷贝构造函数" << endl;
}
Dog &operator=(const Dog other)
{
if(this != &other)
{
animal::operator=(other);
leg_num = new int(*other.leg_num);
}
cout << "子类的拷贝赋值函数" << endl;
return *this;
}
void speak()
{
cout << "汪汪汪" << endl;
}
};
int main()
{
Dog d1;
Dog d2("二狗","黄色",5,4);
Dog d3(d2);
d1 = d3;
return 0;
}
效果图
定义一个基类 Animal,其中有一个虛函数perform(),用于在子类中实现不同的表演行为
#include <iostream>
using namespace std;
class Animal
{
private:
string name;
protected:
string getname()
{
return name;
}
public:
Animal(string name):name(name)
{
}
virtual void perform() = 0 ;
};
class panda:public Animal
{
private:
string name ;
int age ;
string skill;
public:
panda(string name ,string n, int age,string skill):Animal(name),name(n),age(age),skill(skill)
{
}
void perform()
{
cout << getname() << ":" << name << endl;
cout << "年龄:" << age << endl;
cout << "爱好与特长:" << skill << endl; }
};
class dog :public Animal
{
private:
string name;
int age;
string skill;
public:
dog(string name ,string n, int age,string skill):Animal(name),name(n),age(age),skill(skill)
{
}
void perform()
{
cout << getname() << ":" << name << endl;
cout << "年龄:" << age << endl;
cout << "爱好与特长:" << skill << endl; }
};
class tiger :public Animal
{
private:
string name;
int age;
string skill;
public:
tiger(string name ,string n, int age,string skill):Animal(name),name(n),age(age),skill(skill)
{
}
void perform()
{
cout << getname() << ":" << name << endl;
cout << "年龄:" << age << endl;
cout << "爱好与特长:" << skill << endl; }
};
class eagle :public Animal
{
private:
string name;
int age;
string skill;
public:
eagle(string name ,string n, int age,string skill):Animal(name),name(n),age(age),skill(skill)
{
}
void perform()
{
cout << getname() << ":" << name << endl;
cout << "年龄:" << age << endl;
cout << "爱好与特长:" << skill << endl; }
};
class monkey :public Animal
{
private:
string name;
int age;
string skill;
public:
monkey(string name ,string n, int age,string skill):Animal(name),name(n),age(age),skill(skill)
{
}
void perform()
{
cout << getname() << ":" << name << endl;
cout << "年龄:" << age << endl;
cout << "爱好与特长:" << skill << endl;
}
};
int main()
{
while(1)
{
system ("CLS");
cout << "1.panda" << endl;
cout << "2.dog" << endl;
cout << "3.tiger" << endl;
cout << "4.eagle" << endl;
cout << "5.monkey" << endl;
cout << "0.一点都不好玩,我不玩了,我要回家" << endl;
int key;
cin >> key;
switch (key)
{
case 1:
{
panda h("熊猫","花花",5,"吃竹子");
Animal *p = &h;
p->perform();
cout << "按任意键继续" << endl ;
getchar();
getchar();
}
break;
case 2:
{
dog d("狗子","二狗",4,"啃骨头");
Animal *p = &d;
p->perform();
cout << "按任意键继续" << endl ;
getchar();
getchar();
}
break;
case 3:
{
tiger d("老虎","泰哥",8,"晒太阳");
Animal *p = &d;
p->perform();
cout << "按任意键继续" << endl ;
getchar();
getchar();
}
break;
case 4:
{
eagle d("老鹰","大鸟",7,"摸鱼");
Animal *p = &d;
p->perform();
cout << "按任意键继续" << endl ;
getchar();
getchar();
}
break;
case 5:
{
monkey d("猴子","空空",5,"吃香蕉");
Animal *p = &d;
p->perform();
cout << "按任意键继续" << endl ;
getchar();
getchar();
}
break;
case 0:
goto END;
break;
}
}
END:
cout << "回家吃饭去咯" << endl;
return 0;
}
效果演示
动物园演示