C++ 虚函数与继承的一些问题

    科技2022-07-11  83

    #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; }

     

    Processed: 0.014, SQL: 8