在类的函数前面加上 virtual即为虚函数,当基类的函数加上virtual时,表示该函数为虚函数,当子类对父类进行继承的时候,可以直接利用父类的虚函数的方法,也可以自己重新编写该函数的方法。
C++ 虚函数的继承关系
只有在父类的函数定义成为了虚函数后,子类才可以对该函数的功能进行改写,如同同类里的重载一样,不过不需要有传参类型不同的限制。没有加虚函数符号的函数只能使用父类现有的方法。
虚函数的源码示例
基类:Test_virtual_A
class Test_virtual_A
{
public:
Test_virtual_A()
{
std::cout << __func__ << " Init " << std::endl;
}
virtual ~Test_virtual_A()
{
std::cout << __func__ << " close" << std::endl;
}
void Test_func1()
{
std::cout << "Test_virtual_A " << __func__ << std::endl;
}
virtual void Test_func2()
{
std::cout << "Test_virtual_A " << __func__ << std::endl;
}
void Test_func3()
{
std::cout << "Test_virtual_A " << __func__ << std::endl;
}
void Test_func4()
{
std::cout << "Test_virtual_A " << __func__ << std::endl;
}
};
派生类Test_virtual_B
class Test_virtual_B : public Test_virtual_A
{
public:
Test_virtual_B()
{
std::cout << __func__ << " Init " << std::endl;
}
~Test_virtual_B()
{
std::cout << __func__ << " close" << std::endl;
}
void Test_func1()
{
std::cout << "Test_virtual_B " << __func__ << std::endl;
}
void Test_func2()
{
std::cout << "Test_virtual_B " << __func__ << std::endl;
}
virtual void Test_func3()
{
std::cout << "Test_virtual_B " << __func__ << std::endl;
}
};
派生类Test_virtual_C
class Test_virtual_C : public Test_virtual_B
{
public:
Test_virtual_C()
{
std::cout << __func__ << " Init " << std::endl;
}
~Test_virtual_C()
{
std::cout << __func__ << " close" << std::endl;
}
void Test_func1()
{
std::cout << "Test_virtual_C " << __func__ << std::endl;
}
void Test_func2()
{
std::cout << "Test_virtua