【C++】const 方法
2023-09-11 14:15:38 时间
1. 概述
class People {
public :
void say(string word);
void run(Location &loc);
string &name() const;
static void is_valid_height(double height);
private:
static int total_num;
string __name;
Day __birthday;
double __height;
double __weight;
};
const
方法是为了配合const
对象使用的,普通的成员方法可以改变对象内部的属性值,const
对象是一种不希望不改变的对象,如果const
对象调用非const
成员方法,就显得有些违和了。
const
方法保证了在该方法内部不对当前对象的所有属性值进行更改,是提供给const
对象使用的。
普通成员方法say()
,const
对象qiao
,通过qiao
对象调用say()
方法编译器报错:
因为say
方法不是const
类型的方法,但是qiao
对象是const
对象,const对象不能调用非const方法。
将 say
方法更改为 const
类型
#include<iostream>
using namespace std;
class People {
public:
People() {
People::total_num += 1;
}
static void say_count() {
cout << People::total_num << endl;
}
void say() const {
cout << "hahaha, funny!" << endl;
}
~People() {
People::total_num -= 1;
}
private:
static int total_num;
};
//类属性的定义
int People::total_num = 0;
int main() {
const People qiao;
qiao.say();
return 0;
}
运行输出:hahaha, funny!
2. const 方法内部修改成员属性
统计每个对象的 say 方法被调用的次数
希望对象不是数据意义上的const
,而是逻辑意义上的const
,即对象的一些不太重要的属性是可以更改的。
在const
方法内部想要修改相关成员属性,可以在成员属性前面加上关键字mutable
,该关键字就是告诉编译器当前属性不归数据意义上的const
的管辖,是可以进行修改的。
#include<iostream>
using namespace std;
class People {
public:
People() : say_cnt(0) {
People::total_num += 1;
}
static void say_count() {
cout << People::total_num << endl;
}
void say() const {
cout << "hahaha, funny!" << endl;
say_cnt += 1;
return ;
}
~People() {
People::total_num -= 1;
}
private:
mutable int say_cnt;
static int total_num;
};
//类属性的定义
int People::total_num = 0;
int main() {
const People qiao;
qiao.say();
return 0;
}
3. const 方法不能调用非const 方法
const 方法不能调用非 const 方法,如果需要保留这个 non-const
方法,那么就需要对 non-const
方法进行函数重载。
#include<iostream>
using namespace std;
class People {
public:
People() : say_cnt(0) {
People::total_num += 1;
}
static void say_count() {
cout << People::total_num << endl;
}
void say() const {
cout << "hahaha, funny!" << endl;
output(); //调用的是const output
say_cnt += 1;
return ;
}
void output() {
cout << "non-const output function" << endl;
}
void output() const {
cout << "const output function" << endl;
}
~People() {
People::total_num -= 1;
}
private:
mutable int say_cnt;
static int total_num;
};
//类属性的定义
int People::total_num = 0;
int main() {
const People qiao;
qiao.say();
return 0;
}
相关文章
- 【解决】缺少libstdc++.so.6库的原因及解决的方法
- C++Builder 出现 Corrupt Portfolio stream错误修正方法
- 【转】C++右值引用和std::move
- 嵌入式实时系统使用C++的准备工作.
- C++释放指针时提示Invalid address specified to RtlFreeHeap解决办法(堆栈中分配时多分配一些空间再释放)
- C++程序开启大地址(虚拟内存),让32位程序使用4G内存的方法,虚拟内存概念及寻址范围详解
- C++中运行一个程序的内存分配情况及qt中的内存管理机制
- C/C++不同文件夹下包含头文件的方法及#include的使用
- [C/CPP系列知识] Type difference of character literals 和 bool in C and C++
- 《C++覆辙录》——2.6:声明饰词次序的小聪明
- 《C++编程规范:101条规则、准则与最佳实践》——导读
- 《C++ Templates中文版》——2.5 小结
- 《C++编程惯用法——高级程序员常用方法和技巧》——第1章 抽象
- 《C++编程惯用法——高级程序员常用方法和技巧》——1.2 抽象模型间的关系
- 《C++编程惯用法——高级程序员常用方法和技巧》——2.3 公用数据
- 《C++编程惯用法——高级程序员常用方法和技巧》导读
- c++容器vector使用方法总结
- 【C/C++内存分布】
- C++ | explicit关键字
- 153、【动态规划】leetcode ——1049. 最后一块石头的重量 II:滚动数组(C++版本)
- 数据结构之堆栈 力扣简单题讲解(C++实现)
- C++中public、protected及private使用方法
- C++ 字典 map详解
- C/C++文件读写(最全方法,多种实现)
- 再见Windows C++