首页 > 代码库 > C++对象模型学习笔记
C++对象模型学习笔记
1. 全局变量是如何初始化的
//global varA a;int main(){ cout<<a<<endl; return 0; }
如上述例子,全局变量a是在main()函数之前便被初始化的,但是它是如何被初始化的呢?答案是所谓的静态初始化!
2. C++对C进行封装的布局成本
C++在布局和存取时间上主要的额外负担是由virtual 机制引起的,包括:
virtual function机制:用于支持有效率的“执行期绑定”
virtual base class:用以实现“多次出现在继承体系中的base class ,有一个单一而被共享的实体”
此外,还有一些多重继承下的额外负担,发生在“一个derived class 和其第二或后继之 base class 的转换”之间。然而,一般而言,并没有什么天生的理由说C++程序一定比C兄弟庞大或迟缓。
3. 父类与子类的指针有什么不同?
看下面例子:
class ZooAnimal{public: ZooAnimal(): name("") { cout<<"ZooAnimal::ZooAnimal()"<<endl; } ZooAnimal(string str): name(str) { cout<<"ZooAnimal::ZooAnimal(string)"<<endl; } virtual ~ZooAnimal() { cout<<"ZooAnimal::~ZooAnimal()"<<endl; } virtual void rotate() { cout<<"ZooAnimal::rotate()"<<endl; }protected: int loc; string name;};class Bear: public ZooAnimal{public: Bear() { cout<<"Bear::Bear()"<<endl; } Bear(string str): ZooAnimal(str) { cout<<"Bear::Bear(string)"<<endl; } ~Bear() { cout<<"Bear::~Bear()"<<endl; } void rotate() { cout<<"Bear::rotate()"<<endl; } virtual void dance() { cout<<"Bear::dance()"<<endl; }protected: enum Dances{DAN, SLEEP}; Dances dances_known; int cell_block;};int main(){ cout<<"sizeof(ZooAnimal):"<<sizeof(ZooAnimal)<<endl; cout<<"sizeof(Bear):"<<sizeof(Bear)<<endl; Bear b("Yogi"); Bear *pb = &b; ZooAnimal *pbr = &b; return 0;}
指针pb 和 pbr 有什么不同呢?它们都指向Bear对象b的第一个字节,其间的差别是,pb所涵盖的地址包含了整个Bear 对象,而 pbr 所涵盖的地址只包含Bear 对象中的ZooAnimal 部分!
C++对象模型学习笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。