@刚弄的独立博客:http://blog.forgetwind.com,欢迎来踩。
1:类型转换的前提,内存模型匹配。
2:C++多态性:
当C++编译器在编译的时候,发现A类的print是虚函数,这个时候C++就会采用
迟绑定(late binding)的技术,在运行时依据对象的类型(在程序中,我们 传递的B类的首地址)来确认调用的哪一个函数,这种能力叫做C++的多态性。
(编译时确定-normal,or,运行时确定-virtual)
#include
using namespace std; class A {
public: A() {} ~A() {} virtual void print() { cout << "A" << endl; }
}; class B : public A {
public: B() {} ~B() {} virtual void print() { cout << "B" << endl; }
}; int main() { B b; A *a =&b; a->print(); //late binding,看print是否在B类中存在,存在则调用派生类的print return 0;
}
3:根据继承性的原理,基类中的this指针指向派生类的对象。
(@孙鑫C++视频3_测试程序,可调式看运行过程)
#include
using namespace std; class A;
A *pt = NULL; class A {
public: A() { pt = this; } virtual void print() { cout << "基类A的this指针指向A的对象" << endl; }
}; class B: public A {
public: B() {} virtual void print() { cout << "基类A的this指针指向B的对象" << endl; }
};
B test;//调用基类的构造函数时,pt指向A中的this。 int main() { pt->print(); return 0;
}
延伸阅读
最新评论