1.1.this指针
每一个类,生成对象,这个过程叫实例化。
每一个对象都叫这个类的实例。
同一个类的每个实例,也就是每个对象,都有自己的类数据,这些数据也叫实例成员。不同对象调用同一方法,所表现的结果会有所不同,这是为什么呢?
实际上,类中的方法都有一个隐藏的指针,就是this指针。
#include <iostream>
using namespace std;
class Example{
private:
int x;
public:
Example(int a){x = a;}
void setValue(int);
void printAddressAndValue();
};
void Example::setValue(int a){
x = a;
}
void Example::printAddressAndValue(){
cout<<"这个对象的地址是"<<this<<"它的x="<<this->x<<endl;
}
int main(int argc, char** argv) {
Example object1(10),object2(20);
cout<<"object1的地址是"<<&object1<<endl;
cout<<"object2的地址是"<<&object2<<endl;
object1.printAddressAndValue();
object2.printAddressAndValue();
return 0;
}
//输出结果
/*
object1的地址是0x70fe10
object2的地址是0x70fe00
这个对象的地址是0x70fe10它的x=10
这个对象的地址是0x70fe00它的x=20
*/
可以看出,每个对象调用this指针,其实就是他们自己。
不同对象的this不同,这好像是一句废话哈哈哈。
2.2.常量成员函数
为了防止类的某些属性或者其他成员,通过方法被修改,可以用const修饰成员函数
这样的函数被调用,要保证其他调用的函数也不修改。
#include <iostream>
using namespace std;
class Test{
private:
int x;
public:
Test(){x=0;}
void showX() ;
};
void Test::showX() {
cout<<x<<endl;
}
void fun(const Test arr[])
{
arr[0].showX();
}
int main(int argc, char** argv) {
Test T[] ={Test()};
fun(T);
return 0;
}
这里面有一个错误,只需要修改成员函数showX就能正常运行。