019虚函数与多态
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
class Human
{
public:
int age;
string name;
public:
Human();
Human(int age, string name);
~Human()
{
cout << "Human析构函数" << endl;
}
public:
void myFunction();
virtual void eat()
{
cout << "这是Human的eat函数" << endl;
}
};
class Man:public Human
{
public:
Man();
public:
void myFunction();
void eat() override;
};
void Man::eat()
{
cout << "man中的eat()函数执行" << endl;
}
class Woman:public Human
{
public:
Woman();
public:
void myFunction();
void eat() override
{
cout << "woman中的eat()函数" << endl;
}
};
void Human::myFunction()
{
cout << "Human类中的函数执行" << endl;
}
void Man::myFunction()
{
cout << "Man类中的myFunction函数执行" << endl;
}
Human::Human()
{
cout << "Human默认构造函数" << endl;
}
Human::Human(int age, string name)
{
this->age = age;
this->name = name;
}
Woman::Woman()
{
cout << "woman的构造函数" << endl;
}
void Woman::myFunction()
{
cout << "Woman类中的myFunction函数" << endl;
}
Man::Man()
{
cout << "Man类的默认构造函数" << endl;
}
int main(void)
{
Human*p_human = new Human;
Man *p_man = new Man;
Human*p_human2 = new Man;
Human*p_human3 = new Woman;
p_human2->myFunction();
p_human->eat();
p_human2->eat();
p_human3->eat();
p_human3->Human::eat();
delete p_human;
delete p_human2;
delete p_human3;
system("pause");
return 0;
}
020虚函数
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
class Human
{
public:
int age;
string name;
public:
Human();
Human(int age, string name);
~Human()
{
cout << "Human析构函数" << endl;
}
public:
virtual void eat() = 0;
};
class Man :public Human
{
public:
Man();
virtual void eat() override;
public:
};
class Woman :public Human
{
public:
Woman();
virtual void eat() override;
public:
};
Woman::Woman()
{
cout << "这是woman的构造函数" << endl;
}
Human::Human()
{
cout << "Human默认构造函数" << endl;
}
Human::Human(int age, string name)
{
this->age = age;
this->name = name;
}
Man::Man()
{
cout << "Man类的默认构造函数" << endl;
}
void Woman::eat()
{
cout << "Woman类的eat()执行" << endl;
}
void Man::eat()
{
cout << "Man类的eat()执行" << endl;
}
void playObject()
{
Human *p_human01 = new Woman;
p_human01->eat();
Human*p_human02 = new Man;
p_human02->eat();
}
int main(void)
{
playObject();
system("pause");
return 0;
}
021析构函数一般写成虚函数
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
class Human
{
public:
int age;
string name;
public:
Human();
Human(int age, string name);
virtual ~Human()
{
cout << "Human析构函数" << endl;
}
public:
virtual void eat() = 0;
};
class Man :public Human
{
public:
Man();
virtual void eat() override;
public:
~Man()
{
cout << "执行了Man的析构函数" << endl;
}
};
class Woman :public Human
{
public:
Woman();
virtual void eat() override;
public:
~Woman()
{
cout << "执行了Woman的析构函数" << endl;
}
};
Woman::Woman()
{
cout << "这是woman的构造函数" << endl;
}
Human::Human()
{
cout << "Human默认构造函数" << endl;
}
Human::Human(int age, string name)
{
this->age = age;
this->name = name;
}
Man::Man()
{
cout << "Man类的默认构造函数" << endl;
}
void Woman::eat()
{
cout << "Woman类的eat()执行" << endl;
}
void Man::eat()
{
cout << "Man类的eat()执行" << endl;
}
void playObject()
{
Human *p_human01 = new Woman;
p_human01->eat();
Human*p_human02 = new Man;
p_human02->eat();
Woman *p_woman = new Woman;
delete p_woman;
cout << "-------------------------------------" << endl;
delete p_human01;
delete p_human02;
}
int main(void)
{
playObject();
system("pause");
return 0;
}