博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

@孙鑫C++小记

Posted on 2011-07-10 10:40  ¥忘%风  阅读(1222)  评论(0编辑  收藏  举报

@刚弄的独立博客: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;
}