C++中的虚函数

时间:2023-03-09 19:39:54
C++中的虚函数

代码:

 #include <iostream>
#include <cstring> using namespace std; class Base{
public:
virtual void func1();
virtual void func2();
void func3();
void func4();
}; void Base::func1(){
cout<<"Base func1"<<endl;
} void Base::func2(){
cout<<"Base func2"<<endl;
} void Base::func3(){
cout<<"Base func3"<<endl;
} void Base::func4(){
cout<<"Base func4"<<endl;
} class Derived1:public Base{
public:
void func1();//virtual可以省略
//char func2(){};错误,虚函数返回类型需要一致
void func3();
char func4();
}; void Derived1::func1(){
cout<<"Derived1 func1"<<endl;
} void Derived1::func3(){
cout<<"Derived1 func3"<<endl;
} char Derived1::func4(){
cout<<"Derived1 func4 can change the return type"<<endl;
} class Derived2:public Base{
public:
void func1();
}; void Derived2::func1(){
cout<<"Derived2 func1"<<endl;
} int main(){ Base *B;
Derived1 De1;
B = &De1;
B->func1();
B->func3();
B->func4();
De1.func4(); Derived2 *pDe2;
pDe2 = (Derived2*)&De1;
pDe2->func1(); return ; }

输出:

Derived1 func1
Base func3
Base func4
Derived1 func4 can change the return type
Derived1 func1

总结:

1、虚函数必须在父类中必须实现,不实现可以用纯虚函数;

2、子类虚函数的返回类型必须与父类中的返回类型一致,普通函数则可以不同;

3、子类虚函数如果参数发生变化,则虚特性消失。