在C++中,有两种类成员变量:static 和 nonstatic ;三种类成员函数: static 、nonstatic 和 virtual ;
如:
class Point
{
public:
Point(float xval);
virtual ~Point();
float X() const;
static int PointCount();
protected:
virtual ostream& print(ostream &os) const;
float _x;
static int _point_count;
};
简单对象模型:

图1:简单对象模型
在这个模型中,一个object是一些列的slots,每一个slot指向一个成员,成员按其声明次序,各被指定一个slot;
成员并不放在object中,只有指向成员的指针才放在object中,这样可以避免不同类型的成员需要不同的存储空间;
一个object大小计算:指针大小,乘以class中所声明的成员数目。
表格驱动对象模型:

图2 成员表对象模型
C++对象模型:

图3 C++对象模型
优点:空间和存取时间的效率;
缺点:修改非静态成员时,程序代码需重新编译;
对象的差异:
Library_materials thing1;
Book book;
//book被切割了
thing1=book;
//调用的是 Library_materials::check_in()
thing1.check_in();
Library_materials &thing2=book;
// 现在引发的是 Book::check_in()
thing2.check_in();虽然可以直接或者间接处理继承体系中的一个基类对象,但只有通过指针或者引用的间接处理,才支持OO程序设计所需的多态性质;
class ZooAnimal
{
public:
ZooAnimal();
virtual ~ZooAnimal();
//...
virtual void rotate();
protected:
int loc;
String name;
};
class Bear:public ZooAnimal
{
public:
Bear();
~Bear();
//...
void rotate();
virtual void dance();
protected:
enum Dances{...};
Dances dances_known;
int cell_block;
};
Bear b("Yogi");
ZooAnimal*pz=&b;
Bear *pb=&b;
1703

被折叠的 条评论
为什么被折叠?



