常对象指针

// 常量.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;
class MyClass
{
private:
int m_iX;
static int m_iY;
public:
MyClass(){cout<<"1";}
~MyClass(){cout<<"2";}
void setX(int iX){m_iX=iX;}
void setY(int iY){m_iY=iY;}
int getX(){return m_iX;}
int getY(){return m_iY;}
//static int getX2(){return m_iX;} // 错误
static int getY2(){return m_iY;}
};
int MyClass::m_iY = 0;

int _tmain(int argc, _TCHAR* argv[])
{
const int icX = 0;
//icX = 2; // error C3892: “icX”: 不能给常量赋值

int const icY = 0;
//icY = 2; // error C3892: “icY”: 不能给常量赋值

//int & irX = icX; // error C2440: “初始化”: 无法从“const int”转换为“int &”

//int & irY = icY; // error C2440: “初始化”: 无法从“const int”转换为“int &”

//int * ipX = &icX; // error C2440: “初始化”: 无法从“const int *”转换为“int *”

//int * ipY = &icY; // error C2440: “初始化”: 无法从“const int *”转换为“int *”
{
const MyClass c1; // 或者 MyClass const c1;
//int iX = c1.getX(); // error C2662: “MyClass::getX”: 不能将“this”指针从“const MyClass”转换为“MyClass &”
//int iY = c1.getY(); // error C2662: “MyClass::getY”: 不能将“this”指针从“const MyClass”转换为“MyClass &”
int iY = c1.getY2(); // 正确

MyClass c2,c3;
{
const MyClass * pc2 = &c2;
pc2 = &c3; // 正确
//pc2->getX(); // error C2662: “MyClass::getX”: 不能将“this”指针从“const MyClass”转换为“MyClass &”
}
{
MyClass const * pc2 = &c2;
pc2 = &c3; // 正确
//pc2->getX(); // error C2662: “MyClass::getX”: 不能将“this”指针从“const MyClass”转换为“MyClass &”
}
{
MyClass * const pc2 = &c2;
//pc2 = &c3; // error C3892: “pc2”: 不能给常量赋值
pc2->getX(); // 正确
pc2->setX(2); // 正确
}
}
// 注:作为函数参数使用 MyClass * const 表示指针的值不可变,而不是对象的值不可变。
// 其它定义如:const MyClass * 或 MyClass const * 的意义不大。
return 0;
}


 

原文地址:https://www.cnblogs.com/plus/p/2409009.html