C++中const关键字用法详解及实例和源码下载(三)
来源:互联网 发布:网络侦探攻略 编辑:程序博客网 时间:2024/06/06 19:27
上面两篇博文地址:
C++中const关键字用法详解及实例和源码下载(一)
C++中const关键字用法详解及实例和源码下载(二)
继续紧接着上面两篇博文的内容讲述const关键字的用法。
- 指向对象的常指针
将指向对象的常指针变量声明为const型并将之初始化,这样的指针始终保持为其初值,不能改变,即其指向始终不变。
一般形式为:
类名 * const 指针变量名 = 对象地址;
常常使用常指针作为函数的形参,目的是不允许在函数执行过程中改变指针变量的值,使其时钟指向原来的对象。
实例代码:
#include<iostream>#include<string>using namespace std;class Test{public: Test(); Test(int,string); void display();private: int age; string name;};Test::Test(int a,string nam){ age = a; name = nam;}void Test::display(){ cout<<"age="<<age<<",name="<<name<<endl;}int main(){ Test stu(10,"dd"); stu.display(); Test * const p = &stu; p->display(); (*p).display(); return 0;}
实例代码中使用了指向对象的常指针的用法。大家可以试试,该常指针不能指向另一个对象,并且必须进行初始化操作。有一点要注意的是,可以改变它所指向的对象的数据成员的值。
- 指向常对象的指针变量
#include<iostream>#include<string>using namespace std;class Test1{public: Test1(int,string); void display() const;private: int age; string name;};Test1::Test1(int a,string nam){ age = a; name = nam;}void Test1::display() const{ cout<<"age="<<age<<",name="<<name<<endl;}int main(){ Test1 test1(23,"ddee"); test1.display(); const Test1 * pp = &test1; Test1 const * pp1 = &test1; (*pp).display(); (*pp1).display(); pp->display(); pp1->display(); cout<<"=======分隔符========="<<endl; Test1 const test2(25,"ffee"); test2.display(); const Test1 * pp2 = &test2; pp2->display(); return 0;}
结果:
从结果可以看出:
定义指向常变量的指针变量的一般形式为:
1、const 类型 * 指针变量名 (或者)
类型 const * 指针变量名
2、如果一个变量已被声明为常变量,只能用指向常变量的指针变量指向它,而不能用一般的指针变量指向它。
3、指向常变量的指针除了可以指向常变量外,还可以指向未被声明为const的变量。此时不能通过指针变量改变变量的值。
下面再来看代码
#include<iostream>#include<string>using namespace std;class Test1{public: Test1(int,string); void display() const; void setvalue(int) const;private: int age; string name;};Test1::Test1(int a,string nam){ age = a; name = nam;}void Test1::display() const{ cout<<"age="<<age<<",name="<<name<<endl;}void Test1::setvalue(int a) const{ age = a;}int main(){ Test1 test1(23,"ddee"); test1.display(); const Test1 * pp = &test1; Test1 const * pp1 = &test1; (*pp).display(); (*pp1).display(); pp->display(); pp1->display(); cout<<"=======分隔符========="<<endl; Test1 const test2(25,"ffee"); test2.display(); const Test1 * pp2 = &test2; pp2->display(); //改变指针pp的值 cout<<"改变指针pp的值"<<endl; pp = &test2; pp->display();// pp->setvalue(12);// pp->display(); return 0;}
结果:
这段代码改变了pp的值,说明指向常对象的指针变量可以改变指向。
值得注意的是,如果把代码中的注释部分取消,则是编译不通过的,说明指向常对象的指针变量不能改变它所指向的变量的值。
总结如下:
1、const 类型 * 指针变量名 (或者)
类型 const * 指针变量名
2、如果一个变量已被声明为常变量,只能用指向常变量的指针变量指向它,而不能用一般的指针变量指向它。
3、指向常变量的指针除了可以指向常变量外,还可以指向未被声明为const的变量。此时不能通过指针变量改变变量的值。
4、指向常对象的指针常用于函数的形参,目的是在保护形参指针所指向的对象,是它在函数执行过程中不被修改。
5、如果定义了一个指向常对象的指针变量,是不能通过他改变所指向对象的值的,但是指针变量本身的值是可以改变的。
- 对象的常引用
代码如下:
#include<iostream>#include<string>using namespace std;class Time{public: Time(int,int,int); void display(); int hour; int min; int sec;};Time::Time(int h,int m,int s){ hour = h; min = m; sec = s;}void Time::display(){ cout<<"hour="<<hour<<",min="<<min<<",sec="<<sec<<endl;}void fun(Time &t){ t.hour = 19;}int main(){ Time time(12,12,12); time.display(); fun(time); time.display(); return 0;}
结果:
这段代码是很常规的对象的引用的例子,利用对象的引用改变原来对象的值。
如果不希望函数中修改实参的值,可以把函数的形参修改为如下形式:
void fun(Time const &t){ t.hour = 19;}
再次进行编译,则会出错,因为函数fun中尝试修改的引用t所引用对象的值。
这样就保证了在函数中不能修改形参所引用对象的值。
在C++的面向对象的程序设计中,经常使用常指针和常引用做函数的形参。这样既保证数据安全,使数据不能随意修改,在调用函数时又不必建立实参的拷贝!!
博文链接:
C++中const关键字用法详解及实例和源码下载(一)
C++中const关键字用法详解及实例和源码下载(二)
源码下载
- C++中const关键字用法详解及实例和源码下载(三)
- C++中const关键字用法详解及实例和源码下载(一)
- C++中const关键字用法详解及实例和源码下载(二)
- 详解C语言中const关键字的用法
- 详解C语言中const关键字的用法
- Java NIO详解及实例和源码下载(一)
- Java NIO详解及实例和源码下载(二)
- [关键字]C/C++中const关键字详解
- c/c++中关键字static和const的用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- 关键字const用法详解
- c语言中const关键字详解
- C/C++中const关键字详解
- c/c++中const关键字详解
- Prim's minimum spanning tree algorithm
- uva 10404 Bachet's Game (完全背包+博弈)
- 关于html
- 字符串的比较
- 字符串处理函数(string.h)
- C++中const关键字用法详解及实例和源码下载(三)
- C++和C# WebService相互调用
- Spring源码解析——如何阅读源码
- android中Gallery的应用开发-制作自己的相片集
- 【SICP归纳】4 模式匹配和以规则为基础的代换
- 15个nosql数据库介绍和优缺点分析
- 【c语言】有一个分数序列 2/1+3/2+5/3+8/5+13/8+… 求出这个数列前20项的和
- 题目 1032 ZOJ 九度OnlineJudge
- 连接两个字符串