我们首先来看一下纯虚函数的使用
纯虚函数的格式:
virtual 返回值类型 函数名 (参数列表)= 0 ;
下面是一段示例代码
我们在父类Person(抽象类)创建了一个纯虚函数operMenu(void),用以在子类中调用
class Person
{
public:
//菜单界面
virtual void operMenu(void) = 0;
//注销登录 --- 退出登录
// virtual void exit_menu(void) = 0;
string m_name; //姓名
int m_password; //密码
};
接下来们接着创造子类,(别像我一样创建,这里只是为了举例,代码是错的)
//学生类
class Student : public Person
{
public:
//默认构造
virtual void operMenu();
void operMenu();
int m_Student_Id; //学号
};
上面的两种调用方式都是错误的,会发生preLaunchTask"C/C++:g++.exe build active file"已终止,退出代码为-1错误,且编译器不会告知错误位置
virtual void operMenu();
void operMenu();
报错原因是因为我们没有正确重写 抽象类中的 纯虚函数
正确做法:
解法1:(在类内调用)
//学生类
class Student : public Person
{
public:
//默认构造
//在类中直接使用,在子类中的virtual删不删掉都可以
virtual void operMenu()
{
};
int m_Student_Id; //学号
};
解法2:(在类外调用)
//学生类
class Student : public Person
{
public:
//默认构造
//在类外直接使用,在子类中的virtual删不删掉都可以
virtual void operMenu();
int m_Student_Id; //学号
};
void Student::operMenu()
{
}
即可解决报错
还有一种产生的原因:看看编译的时候,这个代码工程生成的.exe文件有没有关闭,没有关闭的也是报这个错误
还有一种报错原因:查看自己定义的类【有的会报错,有的时候不会报错】
比如下面我的示例(错误代码)
class Student : public Person
{
public:
void cancel_order();
}
我并没有在类外实现void cancel_order();
所以改为下面这样就可以了,等到在内外实现了这个代码,再把它改成上面的样子即可
class Student : public Person
{
public:
void cancel_order(){};
}