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. 【MM系列】SAP PO增强BADI

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP PO增强BADI   前言部 ...

  2. java中线程同步的理解(非常通俗易懂)

    转载至:https://blog.csdn.net/u012179540/article/details/40685207 Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序.每一个运 ...

  3. CF 686D. Kay and Snowflake

    给你一个树N个点,再给出Q个询问,问以x为根的子树中,重心是哪个?2≤n≤300000,1≤q≤30000 Sol:从下到上,根据性质做一下.1:如果某个点x,其子树y的大小超过总结点个数一半,则重心 ...

  4. 使用Sklearn构建朴素贝叶斯分类器-新闻分类

    # -*- coding: UTF-8 -*- import jieba import os import random from sklearn.naive_bayes import Multino ...

  5. 【Qt开发】Linux下Qt开发环境的安装与集成

    近期工作需要在Linux下用Qt进行C++开发,所以就在linux下尝试装QT开发环境.本人用的linux是CentOS 6.5.现在对安装过程做出总结.有两种安装方式,下面分别详述: 1 图形化安装 ...

  6. MySQL数据库的连接池问题

    3. sqlalchemy设置连接池数量上限设置 SQLALCHEMY_POOL_SIZE = 100 SQLALCHEMY_MAX_OVERFLOW = 0 # 超出连接池数量的连接后,最多可以连接 ...

  7. 联想Z485安装64位ubantu

    开始今天的正式写作之前不得不吐槽一下联想电脑,真的是很垃圾!联想Z485使用的是AMD的处理器,性能差的很,更让人不能忍的是,居然不能正常安装64位ubantu.这个情况让那些想在自己笔记电脑上安装T ...

  8. ESP32 Ethernet to wifi

    参考网址 https://github.com/espressif/esp-iot-solution/tree/master/examples/eth2wifi RMII PHY Wiring(RMI ...

  9. Tarjan水题系列(2):HNOI2012 矿场搭建

    题目: 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后 ...

  10. idea 代码部分格式化

    效果: 处理Idea使用ctrl+alt+L进行代码格式化时部分代码可以被忽略,不执行格式化功能(webstorm,phpstorm同理) 原因: 有时希望自己写的一些代码不被格式化,或者发现格式化后 ...