@刚弄的独立博客:http://blog.forgetwind.com,欢迎来踩。
1:类型转换的前提,内存模型匹配。
2:C++多态性:
当C++编译器在编译的时候,发现A类的print是虚函数,这个时候C++就会采用
迟绑定(late binding)的技术,在运行时依据对象的类型(在程序中,我们
传递的B类的首地址)来确认调用的哪一个函数,这种能力叫做C++的多态性。
(编译时确定-normal,or,运行时确定-virtual)
#include <iostream>
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 <iostream>
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;
}