IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++中的常对象与常引用 -> 正文阅读

[C++知识库]C++中的常对象与常引用

目录

一、常对象

二、用const修饰的类对象

1.常成员函数

声明

注意

三、常引用

1.声明

2.应该在何时使用:

1.在函数中无需改变其值的参数,应该使用常引用。

?2.复制构造函数的参数一般也宜采用常引用传递。

3.普通引用与常引用的区别


?


一、常对象

必须进行初始化,且不能被更新

二、用const修饰的类对象

1.常成员函数

声明

类型说明符 函数名(参数表) const;

注意const在后面

注意

(1)const是函数类型的一个组成部分,因此在函数的定义部分也要带const关键字

(2)如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数

(3)无论是否通过常对象调用常成员函数,在常成员函数调用期间,目的对象都被视为常对象,因此常成员函数不嫩更新目的对象的数据成员,也不能针对目的对象调用该类中没有用const修饰的成员函数。

(4)const关键字可以用于对重载函数的区分。

三、常引用

1.声明

? ? const 类型标识符 &引用名;

1.常引用所引用的对象不能被更新

2.非const引用只能绑定到普通的对象,不能绑定到常对象。常引用可以绑定到常对象。

3.通过常引用访问该对象时,只能把该对象当作常对象。

4.对于基本数据类型的引用,不能为数据赋值。对于类类型的引用,不能修改它的数据成员,也不能调用它的非const的成员函数。

2.应该在何时使用:

1.在函数中无需改变其值的参数,应该使用常引用。

使用普通引用方式传递会使得常对象无法被传入,采用值传递或传递常引用的方式可以避免这一问题。对于大对象来说,值传递耗时较多,因此传递引用为宜。

? ? 例:

float dist(const Point &p1,const Point &p2)
{
  double x=p1.x-p2.x;
  double y=p1.y-p2.y;
  return static_cast<float>(sqrt(x*x+y*y));
}

? ? p1和p2的值在函数dist内没有改变,顺带一提p1和p2是Point类类型

?2.复制构造函数的参数一般也宜采用常引用传递。

class A{
public:
A(){ cout << "A con" << endl; }
A(const A& a1){ cout << "A copy" << endl; }    //使用复制构造函数的常引用
};
class B{
private:
A ap;
public:
B(A &a1) :ap(a1){ cout << "B con" << endl; }
};
int _tmain(int argc, _TCHAR* argv[])
{
A a1=A();
B b1 = B(a1);
return 0;
}

3.普通引用与常引用的区别

1.都可以通过原本变量修改变量值,且该变量的引用和常引用的值都会改变。

2.不能通过常引用修改变量和常引用的值。

3.可以通过修改普通引用的值改变原本变量的值。

int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
const int &b = a;
int &c = a;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << b << endl;
a = 2;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << b << endl;
    //b = 2;//报错:表达式必须是可修改的左值
c = 3;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << b << endl;
}
 
运行:a=1
b=1
c=1
a=2
b=2
c=2
a=3
b=3
c=3

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:40:43  更:2021-09-10 10:42:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:15:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码