Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527390
  • 博文数量: 68
  • 博客积分: 2501
  • 博客等级: 大尉
  • 技术积分: 713
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-07 17:49
个人简介

文章分类

全部博文(68)

分类: C/C++

2010-09-05 20:56:53

C++中常对象成员包括常成员函数和常数据成员。
1)常成员函数
使用const关键词说明的函数为常成员函数,常成员函数说明格式如下:
<类型> <函数名>(<参数列表>) const;
关于常成员函数需要注意的有:
a,const是函数类型的一个组成部分,因此在实现的部分也要带const关键词。
b,常成员函数不更新数据成员,也不能调用该类中没有const修饰的成员函数。
c,如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其它成员函数。
d,const关键词可以参与区分重载函数,如void pf(); void pf() const;实施对pf的重载。

#include <iostream>
using namespace std;

class Cn {
 public:
 Cn(int r1,int r2) {ra = r1; rb = r2;}
 void print();
 void print() const; //常成员函数
 private:
 int ra, rb;
};

void Cn::print()
{
 cout<<ra<<","<<rb<<endl;
 cout<<"print()"<<endl;
}

void Cn::print() const //实现部分也要带上const关键词
{
 cout<<ra<<","<<rb<<endl;
 cout<<"print() const"<<endl;
}

int main()
{
 Cn a(5, 8);
 a.print(); //调用void print();
 const Cn b(20, 80); //定义常对象
 b.print(); //只能调用常成员函数void print() const;
 return 0;
}
 


2)常数据成员
如果一个类中说明了常数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化。
 

#include <iostream>
using namespace std;

class Sample {
    private:
    const int n; //声明常数据成员
    public:
    Sample(int i):n(i) { //常数据成员只能通过构造函数的初始化列表进行初始化
    void print() { cout<<"n="<<n<<endl; }
};

int main()
{
    Sample a(100);
    a.print();
    return 0;
}

3)静态常数据成员
静态常数据成员的初始化,要在类的外部进行。如在类中有static const int b;其初初始化在类的外进行,为const int B::b = 10;

阅读(1436) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~