关于C++的const对象

对于const类对象,类指针, 类引用, 只能调用类的const成员函数.

1.const成员函数不允许被修改它所在对象的任何一个成员变量.

2.const成员函数能访问对象的const成员, 而其他成员函数不可以.

#include <iostream>
using namespace std;

class CTest
{
private:
    int m_iX;
    int m_iY;
public:
    CTest(int x = 0, int y = 0)
    {
        m_iX = x;
        m_iY= y;
    }
    ~CTest()
    {
        m_iY = 9;
    }
    void SetX(int x)
    {
        m_iX = x;
    }
    void SetY(int y)
    {
        m_iY = y;
    }
    void print() const    //只有const成员函数可以访问const对象的const数据成员.
    {
        cout<<"m_iX = "<<m_iX<<endl;
        cout <<"m_iY = "<<m_iY<<endl<<endl;
    }
};

int main()
{
    CTest t1(11, 22);
    cout<<"t1打印: "<<endl;
    t1.print();

    t1.SetX(33);
    t1.SetY(44);
    cout<<"t1修好值后打印:"<<endl;
    t1.print();

    const CTest t2(55, 66);    //const对象的任何成员都不能被修改
    const CTest *p = new CTest(3, 4);

    cout<<"打印t2:"<<endl;
    t2.print();

//    t2.SetX(77);        //const对象不能调用非const函数.
//    t2.SetY(88);
    cout<<"打印指针对象:"<<endl;
    p->print();

    t2.~CTest();
    cout<<"t2调用析构函数后:"<<endl;
    t2.print();

    return 0;
}
时间: 2024-11-14 10:25:09

关于C++的const对象的相关文章

const对象

常成员函数 一个const对象可以调用const函数,但不能调用非const成员函数.必须将关键字const放在函数参数表之后,才能说明该函数是一个const成员函数. 声明常成员函数的格式如下: 类型标识符 函数名(参数列表) const; 定义定义如下: 类型标识符 类名::函数名(参数列表) const {//函数体} 在类中定义定义如下: 类型标识符 函数名(参数列表) const {//函数体} 在常成员函数里,不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数.如

const与指针修改const对象

我们都知道const对象作用是声明变量为常量,在程序中除非显示转换,否则无法修改. 本文针对显示修改的情况,提醒了一种隐式的错误,以及解决办法. 考虑下面的代码: #include<iostream> int main(){ const int a=0; int *p=const_cast<int*>(&a);//&a返回int *,const_cast<int*>显示转换为int*. *p =1; int b=*p; int c=a; std::cou

const对象默认是static的,而不是extern的

const 和 static 变量,可以放在头文件中 const对象默认是static的,而不是extern的,所以即使放在头文件中声明和定义.多个cpp引用同一个头文件,互相也没有感知,所以不会导致重复定义. 类(class)的定义,可以放在头文件中 用类创建对象的时候,编译器要知道对象如何布局才能分配内存,因此类的定义需要在头文件中.一般情况下,我们把类内成员函数的定义放在cpp文件中,但是如果直接在class中完成函数声明+定义的话,这种函数会被编译器当作inline的,因此满足上面inl

const对象,NULL和nullptr,C++中创建对象数组

 1.定义成了const之后的类 #include <iostream> class area { public: int x; int y; mutable int z; //不受const约束的类成员 area() :x(10), y(10), z(2) { } void printxy()const //不可以访问类中局部变量 { z = z + 1; std::cout << x << " " << y << &q

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式、auto_ptr与单例模式、const成员函数、const 对象、mutable修饰符

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式.auto_ptr与单例模式.const成员函数.const 对象.mutable修饰符 前言 [例]写出面向对象的五个基本原则? 解答:单一职责原则,开放封闭原则,依赖倒置原则,接口隔离原则和里氏替换原则 里氏替换原则:子类型必须能够替换他们的基类型. 设计模式分为三种类型:创建型模式.结构型模式和行为型模式 一.static 与单例模式 1.单例模式 单例模式的意图:保证一个类仅有一个实例,并提供一个访问它

内部链接和外部链接以及const对象在头文件中的若干问题

首先我们看一段示例代码: t1.h [cpp] view plaincopyprint? #ifndef T1_H_ #define T1_H_ #include "t2.h" #ifndef HHH #define HHH int da = 5; #endif #endif #ifndef T1_H_ #define T1_H_ #include "t2.h" #ifndef HHH #define HHH int da = 5; #endif #endif t2

【ThinkingInC++】46、特定的数据成员可以在一个const对象里被改变

/** * 书本:[ThinkingInC++] * 功能:声明关键字mutable,指定一个特定的数据成员可以在一个const对象里被改变 * 时间:2014年9月11日07:47:07 * 作者:cutter_point */ class Z { int i; mutable int j; public: Z(); void f() const; }; Z::Z():i(0), j(0) {} void Z::f() const { //! i++; //没有声明是mutable,所以没法修

const对象默认为文件的局部变量

const限定符可以将一个对象转换为一个常量.因为常量在定义后就不能被修改,所以定义时必须初始化. 在全局作用域里定义非const变量时,它在整个程序中都可以访问.例如: //file1.cpp int counter; //definitaion //file2.cpp extern int counter; //use counter in file1 与其他变量不同,除非特别说明,在全局作用域声明的const变量时定义该对象的文件的局部变量.此变量只能在那个文件中,不能被其他文件访问. 通

不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, const 对象的引用 作者:webabcd 介绍不可或缺 Windows Native 之 C++ this 指针 对象数组 对象和指针 const 对象 const 指针和指向 const 对象的指针 const 对象的引用 示例1.CppEmployee 类CppEmployee.h #pragma