#include <stdio.h>
class B {
public:
int B1;
virtual void fun1() {
B1++;
printf("in B fun1 B1 %p\n", this);
}
B() {
B1 = 0;
this->fun1();
}
// B(const B& b1) {}
};
class C : public B {
public:
C() {
printf("in c this = %p\n", this);
}
virtual void fun1() {
B1 += 6;
printf("in C fun1 %p\n", this);
}
};
int main() {
C c1;//这行执行在屏幕上会有日志打印出来吗?如果有打印的内容是什么?
// in B fun1 B1 (&c1)
// in c this = (&c1)
B b1 = (B)c1, b3; //b1跟b3里的虚函数表的指针是相同的还是不同的? // 相同的
B* b2 = (B*)(&c1); // 对象还是c1, 等同于 B* b2 = &c1;
c1.fun1();//printf输出的是什么? in C fun1 B1 (&c1)
b1.fun1();//printf输出的是什么? in B fun1 B1 (&b1) // 这里注意 b1 与 c1 的地址已经不同了
((B)c1).fun1();//printf输出的是什么?in B fun1 B1 (&((B)c1)), 应该是做了拷贝
(*b2).fun1();//printf输出的是什么?in C fun1 B1 (&c1)
b2->fun1();//printf输出的是什么?in C fun1 B1 (&c1) // 地址是不变的
printf("c1.B1 = %d, ((B)c1).B1 = %d\n", c1.B1, ((B)c1).B1);//输出的是什么? 19 19 // 第二个19是拷贝了一份
return 0;
}