#include <iostream>
using namespace std;
class People
{
public:
People(int age,char gender)
{
this->age=age;
this->gender=gender;
}
public:
int age;
char gender;
public:
virtual int show();//此处没加virtual时,程序的运行结果是 20‘b’执行的是父类的show()方法,加上virtual,执行的是子类的show()方法。
};
int People::show()
{
cout<<age<<" "<<gender<<endl;
return 0;
}
class Student:public People
{
public:
Student(int age,char gender,int score):People(age,gender)
{
this->score=score;
}
public:
int score;
public:
int show(){
cout<<score<<endl;
return 0;
}
int study()
{
cout<<"I'm studying"<<endl;
return 0;
}
};
int main()
{
Student s(20,'b',120);
People e(20,'b');
People *p=&s;
p->show();
p->study();
return 0;
}
/*函数在类内声明,类外定义的方式
子类构造函数的 定义方式
*/
-
在父类没有声明虚函数时,父类引用指向子类对象时,用父类引用调用共有函数名,实际执行父类方法——这一点与java不同。
-
在父类声明虚函数后,父类引用指向子类对象,用父类引用调用共有函数,实际执行子类方法,
-
在父类声明虚函数后,父类引用指向子类对象,用父类引用调用子类独有函数,报错,——这一点与java相同。
-
那如何通过父类的引用调用子类的独有方法呢?
向下转型 将父类引用强制类型转换为子类,然后通过子类调用子类的独有方法。 -
需要特别注意的是,多态只适用于方法,而不是用于属性。即如果父类和子类有同名属性,调用哪个对象的属性,实际就执行哪个对象的属性。