C++常对象与常成员函数的关系

2024-04-28 23:32
文章标签 c++ 函数 成员 对象 关系

本文主要是介绍C++常对象与常成员函数的关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(1) 常对象
用const修饰的对象叫对象常量,其格式如下:
〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉
声明为常对象的同时必须被初始化,并从此不能改写对象的数据成员。


例:分析下列错误的地方,说明理由;
#include<iostream.h>
class Point
{ int x, y;
public:
Point(int a, int b) { x=a; y=b;}
void MovePoint( int a, int b){ x+=a; y+=b;}
void print(){ cout<<"x="<<x<<"y="<<y<<endl;}
};
void main( )
{
const Point point1( 10,10);//常量对象
point1.MovePoint(2,2);//常对象point1的数据不能被更改,所以错误
point1.print( );//print函数的this指针不能指向常对象
}
错误原因在旁边已经注释。 
常对象常被用在对象的引用上。所谓常引用是指说明引用时用const修饰。常引用所引用的对象不能被更新,一般用做形参。其格式:
const 〈类型说明〉&〈引用名〉 
例:根据例题5-11的类给出程序的执行结果:
#include<math.h>
int length(const Point &p1, const Point &p2)
{ int l;
l=sqrt((p1.x -p2.x)* (p1.x -p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
return l;
}
void main( )
{
Point a(1,1),b(4,5);
cout<<"两点的距离是:"<<length( a, b)<<endl;
}
本程序的输出:
两点的距离是:5 
(2)常成员函数
用const关键词说明的函数叫常成员函数。其格式如下:
〈类型〉〈 函数名 〉(〈参数表〉)const;
常成员函数的作用和功能:
常成员函数不能更新对象的数据,也不能调用非const修饰的成员函数。常对象只能调用类的常成员函数以及类的静态成员函数。 
例:给出下列程序的执行结果:
#include<iostream.h>
class Point
{ int x, y;
public:
Point(int a, int b) { x=a; y=b;}
void MovePoint( int a, int b){ x+=a; y+=b;}
void print()const { cout<<"x="<<x<<"y="<<y<<endl;}
};
void main( )
{
Point point1(1,1);
const Point point2( 2,2);//常量对象
point1.print();//普通对象可以调用常成员函数
point2.print( );//常对象调用常成员函数
}
本程序执行结果:
x=1 y=1
x=2 y=2 
在使用常成员函数时要注意: 

     (1) const是函数类型的一个组成部分,因此在函数实现部分也要带有const关键字。 
     (2) 常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。 
     (3) 常对象只能调用它的常成员函数,而不能调用其他成员函数。、

     (4) const关键字可以用于参与重载函数的区分。例如: 

     void Print(); 
     void Print() const; 
     这两个函数可以用于重载。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。 
(5)在const成员函数中: 
     可以修改被定义成mutable的成员变量

原文地址:点击打开链接

这篇关于C++常对象与常成员函数的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944543

相关文章

C/C++常用的编译器分类

1.GCC家族 GNU GCC、GNU C++、Mingw、Dev-C++(Mingw)、Cygwin、DJGPP gcc 原名GNU C Collection,后因支持多种编程语言,改名为GNU Compiler Collection,是大多数类Unix(如Linux)的标准编译器,且适用于Windows(借助其他移植项目实现,如MingW、Cygwin),gcc支持多种计算机体系芯片,如x

成员函数构造函数析构函数

文章目录 类的6个默认成员函数构造函数概述定义特性 析构函数概述特性 类的6个默认成员函数 空类: 如果一个类里面什么都没有写,我们称之为空类 class Date {}; 空类真的什么都没有吗? 实际上并非如此,编译器会自动生成6个默认成员函数。 默认成员函数: 用户没有显示实现,编译器自动生成的额成员函数。 构造函数主要完成初始化工作析构函数主要完成清理

独立游戏《星尘异变》UE5 C++程序开发日志0——游戏介绍

一.游戏简介 《星尘异变》是一款由来自中国传媒大学的6名在校学生制作的一款星际题材模拟经营游戏,在游戏中,玩家需要扮演一个宇宙中的“神”,开采宇宙中分布在“星云”内部的“星尘”,消耗“星尘”来建造“天体”作为生产更多“星尘”以及产生其他效果的的工厂,完成各种任务的同时,妥善经营所有的“天体”使“熵增”不要达到上限,否则游戏会直接结束,每完成一定量的任务,主星都会发生“进化”,解锁包括物流系统等新

MySQL————创建存储过程函数 有参数传递

存储过程使用大纲 有参数传递 delimiter $$ 声明一个名称为get_student_introduce CREATE PROCEDURE gei_student_introduce(in p_name VARCHAR(20))  开始操作 BEGIN  撰写真正在操作DML+DQL都行 select introduce '简介' from student WHERE use

Hive的中函数,用户自定义函数(UDF)

Hive中的函数 Hive为了方便用户的操作,为我们提供了许多的内置函数, $hive>tab        //使用键盘的Tab键可以查看 也通过以下命令可以只查看函数 $hive>show functions;                                //函数的使用方法如下: $hive>select array(1,2,3) ;

pytorch常用内置loss函数与正则化技术(补充小细节)

文章目录 前言一、常用损失函数(后面用到了新的会一一补充)1.1 回归中的损失函数1.1.1 nn.MSELoss()示例1:向量-向量示例2:矩阵--矩阵(维度必须一致才行) 1.2 分类中的损失函数1.2.1 二分类(1)nn.BCELoss --- 二分类交叉熵损失函数示例1:向量-向量示例2:矩阵--矩阵(维度必须一致才行) (2)BCEWithLogitsLoss --- 二分类

C++入门指南(中)

目录 ​编辑 一、C++关键字(C++98) 二、命名空间 2.1 域 2.2 命名空间域 2.1 命名空间定义 2.2 命名空间使用 三、C++输入&输出 四、缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 五、函数重载 5.1 函数重载概念 5.2 C++支持函数重载的原理--名字修饰(name Mangling) 一、C++关键字(C++9

Pandas中的get_dummies()函数实战应用详解

目录 一、独热编码简介 二、Pandas中的get_dummies()函数 1. 基本用法 2. 实战案例 三、高级用法与注意事项 1. 处理缺失值 2. 添加前缀 3. 处理类别型变量中的重复值 4. 使用columns参数指定要转换的列 5. 处理稀疏矩阵 四、总结 在数据处理和分析中,类别型变量(Categorical Variables)的处理是一个重要的环

C++内存管理new/delete和new[ ]/delete[ ]

1.c/c++内存分布 首先看一段代码 int globalVar = 1;static int staticGlobalVar = 1;void Test(){static int staticVar = 1;int localVar = 1;int num1[10] = { 1, 2, 3, 4 };char char2[] = "abcd";const char* pCha

JavaScript创建函数的方式

在JavaScript中,创建函数是比较常见的操作,但是JavaScript中怎么创建函数呢,有几种方式可以创建函数呢?在JavaScript一般有三种方式创建对象 1.函数声明方式 格式:function 函数名(参数1,参数2,···){} [JavaScript] 纯文本查看 复制代码 ? 1 2 3 4 5 function add(num1,num2){    return num