常对象指针
2012-03-20 22:58 江上渔者 阅读(330) 评论(0) 编辑 收藏 举报// 常量.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;
}