第6周-任务1-使用常对象的一个典型错误

原创 2012年03月27日 05:14:21

【题目】下面的程序存在编译错误。有两种方法可以修改,请给出这两种修改方案,在报告中说明你倾向于用哪一种?为什么?处理此类问题的原则是什么?

class C
{private:
    int x;
 public:
    C(int x){this->x= x;}
    int getX(){return x;}
};
void main()
{
    const C c(5);
    cout<<c.getX();   //这一行将会出现错误
    system("pause");
}

【分析】这个程序中的问题在于第10行定义了常对象c;然而在第11行对c的访问中,用了getX()函数,该函数并不是一个const成员函数。

【确症】常对象要由常成员函数进行操作。

【药方】(1)第10行,定义对象 c 时,去掉限定词 const—— c将不享受由const带来的保护;(2)在第 6 行成员函数getX()的定义中,指定const 限定词,指明为一个常成员函数——该函数将不能实施对对象的修改。本题只意在强化这一语法点,程序也并无实际的意义,这两种方法都可以。但在实际应用中,要根据实际的需求确定合适的方案。

【方案1】定义对象 c 时,去掉限定词 const—— c将不享受由const带来的保护

class C
{private:
    int x;
 public:
    C(int x){this->x= x;}
    int getX(){return x;}
};
void main()
{
    C c(5);   //去掉const
    cout<<c.getX();
    system("pause");
}

【方案2】成员函数getX()的定义中,指定const 限定词,指明为一个常成员函数——该函数将不能实施对对象的修改

class C
{private:
    int x;
 public:
    C(int x){this->x= x;}
    int getX() const {return x;} //加上const,成为常成员函数
};
void main()
{
    const C c(5);
    cout<<c.getX();
    system("pause");
}

【评价】在本题中,getX()函数意在返回私有成员x的值,是一个典型的只读不修改的函数。为了防止其中意外的错误修改,常要用 const 进行限定。这样处理后,函数既可以被const 对象调用,也可以被非const对象调用。所以,此方案更好。

将一个函数声明为常成员函数仍然是一个粗线条的处理。更常见的,我们用const 限定函数的参数,这样可以实现更灵活的限定。 



(本文完)

版权声明:本文为博主原创文章,未经博主允许不得转载。

2013级C++第6周(春)项目——对象指针、const【项目1-体验常成员函数】

/* * 程序的版权和版本声明部分 * Copyright (c)2013, 在校学生 * All rightsreserved. * 文件名称: 项目1.cpp * 作 者:刘旺 * 完成日期...

C++第6周(春)项目1 体验常成员函数

china-pub | 亚马逊 | 京东当当  | 豆瓣 图灵社区  官方样章下载==================== 迂者 贺利坚 CSDN博客专栏================= |== I...

JNI:一个典型的错误——A fatal error has been detected by the Java Runtime Environment

原因:传递给本地函数的对象为null // string操作 class JNIString { static { System.loadLibrary("JNIString"); ...

[Golang]一个非典型的GoRoutine的错误

在不少golang入门的文章上,用并发的例子一般是这样写的;package main import ( "fmt" "time" ) func main() { mes...

第五周项目(2)-时间类(1)【典型错误】

 /* *copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:hellow.cpp *作者:田甜 *完成日期:2016年3...

glew库的使用要点 以及 典型错误(如glewInit无法解析等)

这是由于没有初始化glew库所造成的。

经常会遇见java.lang.NullPointerExcetion 的错误,典型的一个错误例子,供大家参考

在练习泛型的时候碰到的一个小问题package com.action;import java.util.ArrayList; import java.util.List;public class Fa...
  • lds_lsj
  • lds_lsj
  • 2015年05月29日 19:23
  • 331

Virtualbox安装centos6.5系统时出错(提示VBoxDD.DLL错误不能为虚拟电脑打开一个新任务的解决办法

解决Unable to load R3 module ...VBoxDD.dll (VBoxDD):GetLastError=1790 我的环境:WIN764位安装virtualBox-4.3.24...

第六周实验报告任务 1 下面程序存在编译错误。有两种修改方案,更倾向于那一种?为什么?

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生  * All rights reserved. * 文件名称:下面...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第6周-任务1-使用常对象的一个典型错误
举报原因:
原因补充:

(最多只允许输入30个字)