#include <iostream> using namespace std; class A{ public: A(){ t(); } void t(){ setI(20); } virtual void setI(int i){ this->i = 2 * i; } int i; }; class B: public A{ public: B(){ cout << "i from B is " << i << endl; } virtual void setI(int i){ this->i = 3 * i; } }; int main(){ A* p = new B(); return 0; }为什么i=40
时间: 2024-04-28 21:25:35 浏览: 37
使用include <iostream>时一定要加using namespace std
在这段代码中,类A和类B都有一个成员变量i。在主函数中,我们创建了一个指向A类的指针p,并将其指向一个新的B类对象。在执行这个语句时,会先调用A类的构造函数,然后调用A类的t()方法。在t()方法中,调用了A类的setI()方法,并将i的值设置为20的两倍,即40。然后,由于setI()方法是虚拟的,因此会调用B类的setI()方法,将i的值设置为20的三倍,即60。但是,由于这个指针是指向A类的,因此只会使用A类的成员变量i,因此最终i的值为40。
阅读全文