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

相关文章

Pytorch中的损失函数Loss Function

由于Pytorch中使用mini-batch进行计算,因此其损失函数的计算结果会对mini-batch取平均 常见的Pytorch中内置的损失函数有: nn.L1Loss 计算input与output的差的绝对值,input与output应该是同一维度,得到的loss也是相应维度 nn.NLLLoss Negative Log Likelihood class torch.n

类图中的依赖、关联、聚集、构成、泛化、实现关系

一、依赖(Dependency) 依赖:A类依赖B类,在B类发生变化时,A类也会随着B类发生变化;通常依赖的类是作为参数传入。 1. Car类是User类中的(某个方法的)局部变量; 2. Car类是User类方法当中的一个参数; 3. Car类向User类发送消息,从而影响B类发生变化; 二、关联(Association) 关联:表示订单与产品对象之间存在关系;关联关

对象copy之BeanUtils

这里说的是spring的BeanUtils.copyProperties。 场景 开发中经常遇到,把父类的属性拷贝到子类中。通常有2种方法: 一个一个set 用BeanUtils.copyProperties 很显然BeanUtils更加方便,也美观很多。 那么任何情况都能使用BeanUtils么,当然不是。要先了解他。 BeanUtils是深拷贝,还是浅拷贝? 是浅拷贝。

Python内置函数oct()详解

Python中的oct()函数是一个内置函数,用于将一个整数转换成它的八进制字符串表示。 函数定义 oct()函数的基本语法如下: oct(x) x:一个整数。 函数返回x的八进制表示,以字符串形式。 基本用法 将整数转换为八进制 number = 64print(oct(number)) # 输出: '0o100' 转换负整数 number = -64print(o

【LinuxC++】Linux环境下C++编程

在阅读的过程中有任何问题,欢迎一起交流 邮箱:1494713801@qq.com   QQ:1494713801   在linux下,开发工具被切割成一个个独立的小工具。各自处理不同的问题。例如: 编辑器(emacs, vim)用来进行编辑程序的 调试器(gdb) 用来调试程序 编译器(GCC) 用来编译和链接程序的 性能分析工具(gcov, gprof) 用来优化程序的 文档生成器

【阅读】《Head First Javascript》第六章——函数

复习要点: 函数让我们转换大问题至小问题,小问题较容易解决函数提供了分离脚本任务的机制,而后再以可再利用的程序代码块予以统合函数是种削减重复代码的极佳方式,因为函数里的程序代码能依你的意愿尽情重复使用自变量让你传递数据至函数里,作为既定任务的输入return语句本身能用于结束函数return语句让函数返回数据给调用函数的代码函数返回一段数据时,数据将被放到调用函数的代码中函数只能返回一块函数r

C++ 结构体内存对齐

定义了两个结构体 typedef struct Cmd {uint8_t ua;uint8_t ub;uint8_t uc;uint32_t ue;} Cmd_t;typedef struct Cmd_tag {uint8_t value;uint8_t data[1]; // 将 data 定义为指向 Cmd_t 结构体的指针} tag_t; 在实际使用中,看见前人的代码是,new

SQL之函数

函数 内建函数 SQL 拥有很多可用于计数和计算的内建函数。 SELECT function(列) FROM 表

友元是一种允许某些外部函数或类访问另一个类的成员的机制

在C++编程语言中,“友元”(Friend)是一种允许某些外部函数或类访问另一个类的私有(private)和保护(protected)成员的机制。友元功能在C++中是非常有用的,尤其是在实现某些特定的功能时,比如操作符重载或者某些需要深入访问类内部的工具函数。 1. 友元函数 友元函数不是类的成员函数,但它可以访问类的所有私有(private)和保护(protected)成员。你可以在类中声明

JVM、JRE与JDK的关系

最开始学 Java 的时候不是很在意这些比较基础的东西,只是知道怎么使用。现在学得有些日子了,虽然也不是很清楚底层的具体实现,但是对于整个体系的搭建大致有了一些了解。最近由于找到工作了比较松懈,而且也在考驾照,所以有些日子没学习了。今天一时想起,把之前的笔记整理了一下,顺便加深下自己的印象。 下面我就按 JVM、JRE、JDK 顺序分别进行说明。 JVM(Java Virtual Mac