#include<iostream>
using namespace std;
class Demo
{
public:
//不论将来会不会使用,但是只要自定义了构造函数
//为了防止会用到无参构造函数,就先把这个定义到这里
Demo(){}
Demo(int a,int b)
{
this->a = a;
this->b = b;
}
void show()
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
//因为show() 是一个非静态成员函数
//因此这里第一个参数是一个 Demo *this 类型的形参
//所以就可以调用getValue();这个函数了,
//而且调用方式相当于
//
/*
void show(Demo *this)
{
getValue(this)
}
*/
}
//void setValue(const Demo *this,int a,int b)
//一般const 不这样用,从字面意思,是设置值
//void setValue(int a,int b)const
void setValue(int a,int b)
{
//因为加了const 所以这里将不会被修改,
//因为后面的const 实际上是修饰这里的第一个隐含的
//当前对象:const Demo *this
//就相当于是 const int a ;
//然后又想去给a 赋值,因此这是不可以的
this->a = a;
this->b = b;
}
//一般情况会这样使用const 去修饰函数
//表示只读
int getValue()const
{
return this->a;
/*
这里是不可以调用非const 修饰的成员函数
因为真是的程序应该是这样:
int getValue(const Demo *this)
{
setValue(this,12);
因为上面本来传进来的是const 类型的this指针,
所以它不满足setValue()中的第一参数类型
也就是说,参数不匹配
}
*/
}
private:
int a;
int b;
};
int main()
{
Demo demo1(10,20);
demo1.show();
demo1.setValue(100,200);
cout <<"Demo->a = " << demo1.getValue() << endl;
//不能再修改demo2中的成员变量
const Demo demo2;
return 1;
}