常数据成员


常数据成员的初始化只能在类构造函数的初始化表中

MINO::MINO(const char *name, int age, string birth, int height, int weight) : m_name(name),m_birthDate(birth)

初始化表

常成员函数

常成员函数不可以调用普通函数,也不能改写对象数据


某个成员变量在const对象中可以被修改有两种方式

  1. 将const指针转化为非cosnt以修改非常成员数据
void MINO::display(void) const
{cout << "姓名:" << m_name << " 出生日期:" << m_birthDate << " 身高:" << m_height << "cm 体重: " << m_weight << "kg" << endl;((MINO *) this)->m_height = 200;  //将const指针转化为非cosnt以修改非常成员数据cout << "姓名:" << m_name << " 出生日期:" << m_birthDate << " 身高:" << m_height << "cm 体重: " << m_weight << "kg" << endl;
}
  1. 把希望可被改变的数据成员声明为mutable
 mutable int m_height;

常对象

常对象(用const修饰的对象)只能访问类中的常成员函数(常成员函数的this指针是常量指针,常量指针可以指向常对象)

 MINO const mino("宋旻浩", 27,"1993-03-30", 181, 67);  //定义常对象

测试源码:

#include <iostream>
#include <cstring>
#include <string>using namespace std;
class MINO
{public: MINO(const char *name, int age, string birth, int height, int weight);~MINO();void display(void) const;void sing(string songName = "공허해");void playTongue(int times = 1);private:const string m_name;const string m_birthDate;int m_age;mutable int m_height;int m_weight;
};
void MINO::display(void) const
{cout << "姓名:" << m_name << " 出生日期:" << m_birthDate << " 身高:" << m_height << "cm 体重: " << m_weight << "kg" << endl;((MINO *) this)->m_height = 200;  //将const指针转化为非cosnt以修改非常成员数据cout << "姓名:" << m_name << " 出生日期:" << m_birthDate << " 身高:" << m_height << "cm 体重: " << m_weight << "kg" << endl;this->m_height = 100;  //m_height为mutable变量,在常成员函数中也可以被改变
}
//常数据成员的初始化只能在类构造函数的初始化表中
MINO::MINO(const char *name, int age, string birth, int height, int weight) : m_name(name),m_birthDate(birth)
{m_age = age;m_height = height;m_weight = weight;
}
void MINO::sing(string songName)
{cout << songName << "is playing" << endl;cout << "거울 속에 내 모습은텅 빈 것처럼 공허해혼자 길을 걸어봐도텅 빈 거리 너무 공허해Da ra dat dat dat dat dat dat,Baby don’t worry" << endl;
}
void MINO::playTongue(int times)
{for(int i = 0; i < times; i++){cout << "Derrrrrrrr~" << endl;}
}MINO::~MINO()
{}
int main()
{string doSomething;MINO mino("宋旻浩", 27,"1993-03-30", 181, 67);while(1){while(cin >> doSomething){if(doSomething == "弹舌"){mino.playTongue();}if(doSomething == "唱歌"){mino.sing();}if(doSomething == "爬"){cout << "主人再见" << endl;exit(0);}if(doSomething == "???"){mino.display();}}}return 0;
}///    指针常量   常量指针   // int a = 100;// int b = 200;// const int *p = &a;// *p = 300;// [错误] 指针指向的内容不可修改// p = &b;    // [正确] 指针可以指向其他地址// const char *s = "world";// char * const p = "hello";// //p = s; //[错误] 指针p的值已经不能再发生改变// *p = 'A'; // 指针p指向地址的内容可以改变     // //但是实际上它应该是一个const char * const p;(就是p指向的内容也是常量) 所以它的值也不能修改   会段错误// int a = 100;// int x = 200;// int * const p = &a;// int * const c = &x;// p = c; //[错误] 指针p的值不能修改// *p = 300; //[正确] 指针p所指向的内容可以修改

常数据成员、常成员函数、常对象相关推荐

  1. C++中的常引用、常对象、常函数、常数据成员

    1.常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改.常引用的声明形式为:const 类型说明符 &引用名. ...

  2. C++ 常数据成员、常成员函数和常对象

    首先给出一个例子简单理解const修饰数据变量的基本工作原理: #include <stdio.h>int main() {const int a = 250;int *ptr = (in ...

  3. 常对象、常数据成员、常成员函数总结

    # include <iostream> using namespace std;class Time {public:Time(int h = 10, int m = 30, int s ...

  4. C++常数据成员,常成员函数及常对象的使用

    一.常数据成员不可修改,声明方式:const [类型][标识符] 二.常成员函数可以和同名的非常成员函数发生重载,且声明和定义时都要带上const,调用时不需要,声明方式:[类型][函数名](参数列表 ...

  5. 常对象、常数据成员、常成员函数

    C++有不少措施保护数据的安全性,如private保护类的数据成员等. 但对于一些共用的数据,如函数实参与形参等,我们可以在不同的场合通过不同的途径访问同一个数据对象.有时不经意的误操作会改变数据的值 ...

  6. 【C++】 常对象、常数据成员、常成员函数总结

    常数据成员  ◆ 常数据成员必须进行初始化,并且不能被更新.  ◆ 常数据成员不能在声明时赋初始值(普通数据成员也是),常数据成员必须在构造函数初始化列表进行初始化:普通数据成员在初始化列表和函数体中 ...

  7. 常对象成员和常成员函数

    -----------------siwuxie095 常对象成员 和 常成员函数 看如下实例: 定义一个坐标类:Coordinate 要想正确的初始化,必须通过初始化列表来初始化,因为两个数据成员 ...

  8. 常数据成员、常成员函数

    定义常数据成员: 类型 const 对象名:或者 const 类型 对象名: 例如:const clock c1(9,9,9)或者: clock const c2(10,10,10): 常对象的几条特 ...

  9. 常数据成员和常成员函数

    常数据成员 引言:类存在的目的之一就是为了实现封装性,但是实际上经常使用公有函数接口去修改其数据成员,为了保证类中可以有一些数据成员绝对不会被修改,所以创造了常数据成员 特点: 1.在定义时要在头部加 ...

最新文章

  1. 漫画 | 花了七天时间测试,我彻底搞明白了 TCP 的这些内存开销!
  2. 008-SDK框架之LYWSDKPlatformManager.h
  3. 线程安全且高效的单例
  4. Android studio安装
  5. 理解 PHP output buffer
  6. NOIP 2000 进制转换
  7. Unix命令行程序和内建指令
  8. Atitit.加密算法 des  aes 各个语言不同的原理与解决方案java php c#
  9. unity下载和安装
  10. 如何关闭Windows 1011自动更新
  11. 小技巧(12):关于PC端简单的视频剪辑处理中,bandicam(录制)、pr(配音)、pr(导出)、剪映(字幕识别)、pr(最终版导出)的全过程及基础设置
  12. Mysql数据库repair table 修复表
  13. 把数字用拼音表示并输出
  14. 商标注册的费用是多少钱
  15. 【工程光学】几何光学基本定律成像概念
  16. max等聚合函数和group by搭配使用的注意事项
  17. 英文双引号引发的杯具
  18. Arduino用超声波测距模块HC-SR04获得精确测量值——误差数据的排除
  19. js Number计算精确度
  20. mnist数据集在FATE上应用

热门文章

  1. 拉着阿里P8、字节3-2搞的精华指令合集鼠标垫,粉丝每人送一块!
  2. type类型为number的input标签可以输入字母e
  3. 如何退订kylin社区邮件
  4. C++的流读取字符时的小坑
  5. 图解数据结构:栈和队列
  6. 推荐从别处偷到的十大灵异测试,来试试吧!
  7. qpython oh下载_qpython手机版下载
  8. Redis Pipeline 原理及注意事项
  9. 利用计划任务进行权限维持的几种姿势
  10. mysql set stemp = $_mysql sql 单个表肿么导入