《c++语言的设计和演化》笔记(二)

3.5虚函数

3.5.1 对象布局模型

1.“把在一个类中定义的虚函数集合定义为一个指向函数的指针数组,这样,对一个虚函数的调用,也就变成了通过该数组而做的一些简单间接函数调用。对于每一个包含虚函数的类,都存在这样的一个数组,通常称为虚函数表或者vtbl。而这些类的每个对象都包含一个隐式指针,一般称为vprt,它指向该对象的类的虚函数表。”(p.66)

class A {
	int a;
public:
	virtual void f();
	virtual void g(int);
	virtual void h(double);
};

class B :public A {
public:
	int b;
	void g(int); //overrides A::g()
	virtual void m(B*)
};

class C : public B {
public:
	int c;
	void h(double)j; //overrides A::h()
	virtual void n(C*);
};

类C的一个对象看起来大概是这样:
虚函数表

3.8 常量

1.“在操作系统中,常常能见到人们用两个二进制位直接或间接地对一块存储区进行访问控制,其中用一个位指明某个用户能否在这里写,另一个指明该用户能否从这里读。我举得这种思想可以直接用到C++中,因此也考虑过允许把一个类型描述为readonly或者writeonly。”(p.78)
2.“直到现在,在C语言中还不能规定一个数据元素是只读的,也就是说,它的值必须保持不变。也没有任何办法去限制函数对传给它的参数的使用方式…readonly运算符可用于防止对某些位置的更新。它说明,对于所有访问这个位置的合法手段而言,只有那些不改变存储在这里的值的手段才是真正合法的。”(p.78)
3.“我在离开这次会议时得到的是同意(通过投票)把readonly引进C语言(而不是C with Classes 或者C++),但把它另外命名为了const。”(p.79)
4.“const来表示常数,可以成为宏的一种有用替代物,但要求全局const隐含地只在它所在的编译单元起作用。因为只有在这种情况下,编译器才能很容易推导出这些东西的值确实没有改变…把简单的const用到常量表达式中,并可以避免为这些常量分配空间。”(p.79)
[注释1]常量表达式中的值不必为其分配内存空间,与程序代码存储在一起。
5.“因为C语言中的const不能用在常量表达式中,这就使const在C语言中远没有在C++中那样有用。”(p.80)

3.11 次要特征

3.11.3 限定

1.“C++引进::表示类的成员关系,而将.保留专用于对象的成员关系,e.g. object.member,class::member。”(p.84)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值