C++

c++模型笔记:


第一章:关于对象

1:c中数据和处理数据是分开声明的,c没有支持数据和函数之间的关联性,程序性的

2:c++中 data members直接内含在每一个class object 之中,就像c struct一样,而member function 虽然在object 之中,但每一个non-inline member function只会诞生一个函数实体,拥有inline member function 则会在其每一个使用者(模块)身上产生一个函数实体,

C++ 在布局和存取时间上的额外负担是由 virtual引起的,包括:

1)vitrual function 机制,用以支持一个有效率的执行器绑定(runtime blinding)(虚拟函数的功能是使子类可以用同名的函数对父类函数进行覆盖,并在调用时自动调用子类覆盖函数)

2)virtual base class 用以实现“多次出现在继承体系中的base class 有一个单一而被共享的实体”

1.1 c++ object model


1.2 a keyword distinction

1 struct实现了c中数据萃取的观念,而class关键词实现的是c++中ADT观念

1.3 an object distionction

1:c++以以下方法支持多态:

多态:在运行时,能依据其类型确认调用哪个函数的能力成为多态

1)经由一组隐含的转换操作,例如把一个derived class 指针转化成一个指向其public base type 的指针, shape *ps = new circle();

2)virtual function 机制

3)经由 dynamic_cast 和typeid 运算符: if(circle *pc = dynamic_cast<circle*>( ps))...

多态的主要用途是经由一个共同的接口来影响类型的封装,这个接口通常定义在一个抽象的base class 中

void rotate(
X datum,
const X *pointer,
const X &reference )
{
// cannot determine until run-time
// actual instance of rotate() invoked执行之前无法确定哪一个rotate()实体被调用
(*pointer).rotate();
reference.rotate();
// always invokes X::rotate()
datum.rotate();
}
main() {
Z z; // a subtype of X
rotate( z, &z, z );//指针和引用完成调用
return 0;
}

需要多少内存够表现一个class object

* 其nostatic data member 的大小

*填补的空间,32位机为4bytes的倍数

*为支持virtual而由内部产生的额外负担

the type of a pointer

*从内存需求上说,ZooAnimal  *pl 和int *t 没有什么不同,”指针类型“会教导编译器如何解释某个特定地址中的内存内容及其大小

*void *指针只能够含有一个地址,而不能通过它操作所指之object ??

* 转型(cast) 其实是种编译指令,大部分情况下不影响一个指针所含的真正地址,它只影响”被指出之内存的大小和其内容“的解释方式

----------------------

注意:子类重新定义父类的虚函数的做法叫做覆盖,而不是重载,重载是在编译阶段就确定的了,是静态的,因此重载与多态无关



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值