1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
虚函数的作用在于运行的时候能够正确的识别调用函数的对象是哪个类的,然后正确的调用对应的函数,
如果对象是基类的对象,调用的就是基类的函数,如果对象是派生类的,就调用派生类的同名函数。
class
Base {
public
:
virtual
void
fun() {
puts
(
"Base::fun()"
);
}
};
class
D1 :
public
Base {
public
:
void
fun() {
puts
(
"D1::fun()"
);
}
};
class
D2 :
public
Base {
public
:
void
fun() {
puts
(
"D2::fun()"
);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Base *ptr;
Base b;
D1 d1;
D2 d2;
ptr = &b;
ptr->fun();
// "Base::fun()"
ptr = &d1;
ptr->fun();
// "D1::fun()"
ptr = &d2;
ptr->fun();
// "D2::fun()"
}
void funtest(Base * b)
{ b->fun(); }
int _tmain(int argc, _TCHAR* argv[])
{ Base b; D1 d1; D2 d2; funtest(&b); // "Base::fun()" funtest(&d1); // "D1::fun()" funtest(&d2); // "D2::fun()" getchar(); }
上面两个main函数的执行结果是一样的,意义也是一样的,funtest的作用是将
Base类型的参数指针指向派生类的实参对象地址,
它本质上也和
ptr = &d1;ptr = &d2;这样的写法是一样的。都可以访问派生类的虚函数。
注意:基类的对象指针可以指向派生类的对象的地址,那反过来派生类的指针不可以指向基类的对象地址。
|
虚函数的好处
最新推荐文章于 2024-08-17 18:50:39 发布