Grisson's .net

源码之前,了无秘密

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
即使两个类具有完全相同的成员表,他们仍是不同的类型

class MyClass object1;   //从c中借用
MyClass object2;
以上两种声明方法是相同的

从类体的左括号开始的区域在缺省情况下是private区。

class MyClass;    //MyClass类的声明
以上代码只是声明,在没有定义一个类之前,我们是不能定义该类类型的对象的。因为类类型的大小不知道,编译器不知道预留多少存储空间。但是,我们可以声明指向该类类型的指针或引用。允许指针和应用是因为他们都是固定大小的,这于他们所指向的对象无关。所以一个不可以有自身类型的数据成员,但是,他可以有指向自身类型的数据成员的指针。
e.g.
class LinkStruct
{
  int data;
  LinkStruct *pre;
  LinkStruct *next;
}

允许基类的指针和应用指向到派生类的对象

每个类对象都有自己的类数据成员拷贝,但是,每个类成员函数的拷贝只有一份,静态数据也只有一份。

如果把函数定义在类的声明里,那么这些函数将被自动定义为inline。也可以显示的在类体中出现的函数声明上用关键字inline,或在类体外出现的函数定义上显示的是用关键字inline,或两者都用来定义inline函数。
由于inline函数必须在调用他的每个文件中被定义,所以没有在类体中定义的内联成员函数必须放在类声明的同一个头文件中。

类的设计者通过把成员函数声明为const,以表明他们不修改类对象。
一个const对象只能调用被定义为const的函数。
如果类中含有一个指针,那const函数不能修改指针使它指向其他对象,但是可以修改该指针所指向对象的值。
const成员函数可以被相同参数表的非const成员函数重载。这时,对象的常量性决定了调用那个函数。
我们可以在一个类的字段声明的前面加上mutable,这样即使把这个类的一个对象声明为const,mutable所修饰的成员也永远不会成为const成员
e.g.
class MyClass
{
public:
  
bool isEqual(char ch) const;  //注意const的位置,对于字段可以声明在前面
  char get(int x,int y);
  
char get(int x,int y) const;

private:
  
const int data;      //注意const的位置
}


bool MyClass::isEqual(char ch) const //与inline不同这里必须加const,并注意其位置
{
//
}
posted on 2005-08-17 00:55  海盗  阅读(498)  评论(1编辑  收藏  举报