尽量少用转型动作章节中讲到。子类执行的f并不是在当前对象上执行父类函数,只是在base class的副本上执行。那么
如下执行后,副本值被改写,而d的i依然是初始化时候的0
#include <stdio.h>
#include <stdlib.h>#include <iostream> // std::cout
#include <thread> // std::thread
class B{
public :
int i=0;
public:
void f(){
i=1;
}
};
class D:B{
public:
void f(){
static_cast<B>(*this).f();
//i=2;
}
void f1(){
int i2=static_cast<B>(*this).i;
i2=3;
}
void f2(){
int i2=i;
i2=3;
}
};
/*
* === FUNCTION =========================================================
* Name: main
* Description: program entry routine.
* ========================================================================
*/
int main(int argc, const char *argv[])
{
class D d;
d.f();
d.f1();
d.f2();
int a=1;
return EXIT_SUCCESS;
} /* ---------- end of function main ---------- */