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++ 常量成员函数的碎碎知识点

#include<iostream>
using namespace std;

//常量指针:指向常量的指针  const int* p = &a;   更加关注 不可以通过指针 改变 指针所指向的变量或对象的值;
//指针常量:指针是一个常量  int* const p = &a;   更加关注 指针指向唯一性

class A {
public:       //记得加上作用域,不然默认为私有
	A() {}
	~A() {}

	void A()
	{
		a = 5;
	}

	void isCommon();      //等价于:void isCommon(A* const this);   指针常量
	void isConst() const; //常量成员函数; 等价于:void isCommon(const A* const this);  常量指针 

private:
	int a;
};

void A::isCommon() {}

void A::isConst() const
{
	//this->a = 6;   //(×)  //常量指针所指向的对象是不可以被改变的; 换句话说:在常量成员函数内,成员数据是不可以作为左值被赋值的;
	//(*this).a = 5; //(×)

	int b = this->a;

	return;
}
//const的作用:修改隐式参数this指针的类型 --> 常量指针 --> 不可通过指针改变指针所指对象的值 --> 函数体内的成员变量的读写模式变为只可读不可写;

/*
* 一:常量成员函数的作用:
* ①改变函数体内成员数据的读写模式,从 可读可写 变成 只读;
* ②成员函数加上const可以更便捷的告诉开发者该函数是个只读函数,若你的函数体设计不对成员数据进行赋值,那么建议将函数声明为常量成员函数;
*/


// 二:常量成员函数的调用规则
void test00()
{
	A a;
	a.isCommon();   //非常量指针指向非常量对象  (√)
	a.isConst();    //常量指针指向非常量对象    (√)

	const A aa;
	//aa.isCommon();  //非常量指针指向常量对象    (×)
	aa.isConst();   //常量指针指向常量对象      (√)

	/*
	* C++ Primer原话:默认情况下,this的类型是指向类类型非常量版本的常量指针。
	* 指针类型必须与其所指对象类型一致;但有两个例外:①允许令一个常量指针指向非常量对象;②
	*/
}

//三、常量成员函数注意点:
//   声明和定义时都需要在参数列表后加const;

//**************************************************************************************************************************

//常函数
class Person
{
public:

	//this指针的本质  是指针常量   指针的指向是不可以修改的
	// const Person * const this;
	//在成员函数后面加const,修饰的是this指向,让指针指向的值也不可以修改
	void showPerson() const
	{
		this->m_B = 100;
		//this->m_A = 100;
		//this = NULL; //this指针不可以修改指针的指向的
	}

	void func()
	{
		m_A = 100;
	}

	int m_A;
	mutable int m_B; //特殊变量,即使在常函数中,也可以修改这个值,加关键字mutable
};


void test01()
{
	Person p;
	p.showPerson();
}

//常对象

void test02()
{
	const Person p; //在对象前加const,变为常对象
	//p.m_A = 100;
	p.m_B = 100; //m_B是特殊值,在常对象下也可以修改

	//常对象只能调用常函数
	p.showPerson();
	//p.func();  //常对象 不可以调用普通成员函数,因为普通成员函数可以修改属性
}

int main() 
{

	system("pause");
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:17:37  更:2022-04-22 18:20:32 
 
开发: 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 22:04:05-

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