1 大家反馈写的字数太少,但是水平只有这样呀。今天改变一下方式()
2
#include<iostream>
/*定义一个类*/
class people{
public:
people (char *name, int age);
viriual void display();//声明为虚函数
protected:
char *m_name;
int m_age;
}
/*实现类的成员方法*/
people::people(char *name, int age): (m_name)name, (m_age)age{}
注意:在定义构造函数时,在构造函数参数表和程序块之间用冒号后面接一串成员的初始化函数的调用。在C++中,列表初始化是与定义捆绑的,即类似于 int D=1; 而非 int D; D=1;
void people::display()
{
cout<<m_name<<"今年"<<m_age<<"岁。无业游民"<<end1;
}
/*派生类*/
class Teacher: public people
{
public:
Teacher(char*name,intage,intsalary);
virtualvoiddisplay();//声明为虚函数
private:
int m_salary;
};
Teacher::Teacher(char*name,intage,intsalary):People(name,age),m_salary(salary){}
voidTeacher::display(){
cout<<m_name<<"今年"<<m_age<<"岁了,是一名教师,每月有"<<m_salary<<"元的收入。"<<endl;
}
3
通过问题看本质,因为派生类对象访问成员函数时,由于成员函数(多种形态)导致访问不到派生类函数。所以采用virtual
(被编译器设置为基类中的版本,这就是所谓的静态多态,或静态链接 - 函数调用在程序执行前就准备好了。有时候这也被称为早绑定,因为 area() 函数在程序编译期间就已经设置好了)(只需要在基类前加virtual就可以了)
4 后期添加 纯虚函数
您可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是您在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。virtual int abc() = 0; //= 0 告诉编译器,函数没有主体,上面的虚函数是纯虚函数。