C++ Primer:类

即使两个类具有完全相同的成员表,他们仍是不同的类型

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.
None.gif class  MyClass
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
public:
InBlock.gif  
bool isEqual(char ch) const;  //注意const的位置,对于字段可以声明在前面
InBlock.gif
  char get(int x,int y);
InBlock.gif  
char get(int x,int y) const;
InBlock.gif
InBlock.gif
private:
InBlock.gif  
const int data;      //注意const的位置
ExpandedBlockEnd.gif}

None.gif
None.gif
bool  MyClass::isEqual( char  ch)  const   // 与inline不同这里必须加const,并注意其位置
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
//dot.gif
ExpandedBlockEnd.gif
}
posted on 2005-08-17 00:55 海盗 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Grisson/archive/2005/08/17/216466.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值