1.this指针

this指针是一个指向对象的指针。
this指针是一个隐含于成员函数中的对象指针。
this指针是一个指向正在调用成员函数的对象的指针。
类的静态成员函数没有this指针。//一般只访问静态数据成员  也就没有什么对象可言了  如果访问非静态数据成员还要声明 也更加没有用this的必要了
 
2.
(1)常对象
常对象是指对象的数据成员的值在对象被调用时不能被改变。常对象必须进行初始化,且不能被更新。不能通过常对象调用非const型的普通成员函数(常对象只能调用常成员函数),但是普通对象可调用const成员函数。
    const 类名 对象名[(实参列表)]
    类名 const 对象名[(实参列表)]
虽然常对象中的数据成员只能引用,不可以修改。但是如果一定要修改,可将需要修改的数据成员声明为mutable,如:mutable int Width; 这样就可以用声明为const的成员函数来修改它的值了。
 
(2)常数据成员
在类体中将数据成员声明为const型,即为常数据成员。
常数据成员不同于一般的符号常量,它在成员说明时不能被赋值,而是在对象被说明时被赋值。一旦对象被创建,这个值就不允许改变,任何类内外函数只可读它,而不可改变它。
值得注意的是,因为不能对常数据成员赋值,所以对常数据成员的初始化必须要用构造函数的参数初始化列表来完成。
 
如声明Length为常数据成员:const int Length; //声明Length为常数据成员
 
下面代码在构造函数中对Length进行赋值,这种用法是错误的:
Rectangle(int w,int len)
{ Width=w; Length=len; } //错误,常数据成员不能被赋值
正确的写法应该是:
Rectangle(int w,int len):Length(len)
{ Width=w; }
 
3.常成员函数
(1)关键字const是函数的一部分,在函数声明和定义部分都必须包含。
int Area() const; //常成员函数Area( )的声明//const放在最后
int Rectangle::Area() const
//在类体外对常成员函数Area( )的定义
{…}
(2)常成员函数可以引用const或非const型数据成员,但只能引用,不可修改。
(3)常成员函数不能调用另一个非const型成员函数。
 
4.常指针
(1)指向对象的常指针
将指针变量声明为const型,这样指针值就始终保持为其初值,不能改变,即指针指向的内存中存放的数值可以改变,但是指针所指向的地址不可以改变。使用常指针,目的是不允许改变指针变量的值,而使其始终指向原来的对象。
类名 * const 指针变量名=&对象名;
如:Rectangle r1(6,6);
       Rectangle *const pr=&r1;
 
(2)指向常对象的指针变量
 
const 类名 * 指针变量名=&对象名
如:
Rectangle r1(6,6);
const Rectangle *pr=&r1;
定义的指针pr是指向常对象的指针变量。试图通过pr修改对象r1的值的操作都是非法的。但是指针pr可以指向另外一个Rectangle的对象,
 
Rectangle r2(8,8);
pr=&r2;
但是,此时依然不能通过pr修改r2的值。//具体是为什么 到时候再补上吧
 
 

c++复习——类(2)的更多相关文章

  1. C++复习:类和对象

    类和对象 基本概念 1)类.对象.成员变量.成员函数 2)面向对象三大概念 封装.继承.多态 3)编程实践     类的定义和对象的定义,对象的使用     求圆形的面积     定义Teacher类 ...

  2. Swift4.0复习类

    1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...

  3. c++复习——类(1)

    1.  拷贝构造函数 //并没有搞懂 先存着吧  遇到实际情况再回来看看 拷贝构造函数在以下三种情况被调用: (1)当用一个已经初始化过的对象去初始化同类另一个对象时, 拷贝构造函数被调用. Samp ...

  4. java面向对象复习之一

    目的: 复习如何实现代码的逻辑思路: 复习类的封装: 复习类和对象的创建使用和封装: 练习: 实现功能:人到超市买东西 抽出三个类: 人 超市 东西: 功能点: 买: 它们之间的联系:东西包含于超市 ...

  5. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  6. PyQt5(1)——Qt Designer初探

    相关环境配置我们就不介绍了(网上有很多教程) Qt Designer 是一款十分强大的GUI工具,生成的文件为 .UI文件  可以通过命令转化为Py文件,简单来说我们可以通过拖拽方式生成界面,在通过简 ...

  7. 2019全国大学生信息安全竞赛ciscn-writeup(4web)

    web1-JustSoso php伪协议获取源码 ?file=php://filter/read=convert.base64-encode/resource=index.php index.php ...

  8. 20200117 .net 001

    第一部分:面向对象 封装 继承(里氏转换) 多态第二部分:值类型.引用类型.字符串操作第三部分:集合文件操作第四部分:正则表达式第五部分:XML操作第六部分:委托.事件第七部分:反射. 1.变量的命名 ...

  9. .Net 笔记

    1.介绍 .net一般指.Net Framework框架.一种平台,一种技术. C#是一种编程语言,可以开发基于.net平台的应用. .Net Framework是框架是.Net平台不可缺少的一部分, ...

随机推荐

  1. linux/linux学习笔记-vim文本编辑器(mooc)

    vim文本编辑器 vim与vi的区别:( vim=vi +IMproved) VIM是一个Unix以及类unix文本编辑器 特点:功能强大,高度可定制 vim编辑器的三种模式:一般模式.编辑模式和命令 ...

  2. 第十一周总结 继承、this和super的区别和用法、方法的重写和重载

    一.继承 1.子类继承父类,通过一个关键字 extends 2.子类的对象可以调用父类中的(public protected)属性和方法 当作自己的来使用 3.子类可以添加自己独有的属性和方法 4.子 ...

  3. 深入IO 想学必看!受益匪浅哦~

    一:IO流概述 IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间的数据传输,Java对于数据的操作都是通过流实现,而Java用于操作流的对象都在IO包中. 分类: 按操作数据 ...

  4. Eureka 源码分析之 Eureka Client

    文章首发于微信公众号<程序员果果> 地址:https://mp.weixin.qq.com/s/47TUd96NMz67_PCDyvyInQ 简介 Eureka是一种基于REST(Repr ...

  5. 8. golang 基本类型转换

    golang 类型转换只能显性转换 不能自动转换 基本数据类型间的转换 var x1 int = 2 var x2 int16 var x3 int8 x2 = 200 + x1 x3 = 200 + ...

  6. HNUSTOJ-1698 送外卖(TSP问题 + 状态压缩DP)

    1698: 送外卖 时间限制: 1 Sec  内存限制: 128 MB提交: 123  解决: 28[提交][状态][讨论版] 题目描述 在美团和饿了么大行其道的今天,囊中羞涩的小周和小美,也随大流加 ...

  7. HNUSTOJ-1695 跳格子(略感头疼)

    1695: 跳格子 时间限制: 1 Sec  内存限制: 128 MB提交: 230  解决: 57[提交][状态][讨论版] 题目描述 逸夫楼的大厅的地面有10行10列的石砖,我们用坐标(x,y)来 ...

  8. 基于gulp的前端自动化方案

    前言 ​ 最近几年前端技术发展日新月异,特别是单页应用的普及.组件化.工程化.自动化成了前端发展的趋势.webpack已经成为了前端打包构建的主流,但是一些老古董的项目还是存在的,也有优化的必要,正好 ...

  9. P4556 [Vani有约会]雨天的尾巴(线段树合并+lca)

    P4556 [Vani有约会]雨天的尾巴 每个操作拆成4个进行树上差分,动态开点线段树维护每个点的操作. 离线处理完向上合并就好了 luogu倍增lca被卡了5分.....于是用rmq维护.... 常 ...

  10. Java创建二叉树

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/yeweiouyang/article/details/37814461 二叉树的值保存在数组中,以0 ...