您的位置:首页 > 其它

Lesson 12 this的使用

2014-08-18 13:56 162 查看

对象数组

数组:
A a[3] = {A(1),A(2)};  // 第三个用的是默认构造函数初始化


对象指针:
里面存的是对象的地址

const 赋值:权限不可以变大 (const不能赋给非const)

1. const对象只能被const指针引用

this指针

不同的对象占有自己的存储空间,但访问同样的成员函数(代码区),这样就存在成员函数区别不同对象的问题。
所以引入了this指针:指向当前调用成员函数的对象的指针;

A::set(int a); //   set( A *const this , int a);
{
<span style="white-space:pre">	 x = a; // this->x = a;
}
a.set(5);  // set(&a,5);

A A::print()
{
return *this;  // 返回调用的对象,
}
A &a1 = a.print(); // 这时a1并不是指向a,因为前面return *this会将值赋给一个中间变量,再
赋给a1,a1 是指向中间变量。 要实现a1指向a,则print函数要返回A&


1. 静态成员函数是没有this指针,无法用 this->x,所以不能访问变通的数据成员,
2. 非静态成员函数 void A::fun()const; // const修饰的是this指针的,而不是函数,由于static成员函数
没有this指针所以不能用const 修饰; 非成员函数变成: void A::fun(constA* this const this);
3. 同样因为这样,const对象不能调用非const成员函数(this指针是const A* this const this,调用非const成员函数时,会给非cosnt
成员函数的this指针传上面的指针,权限被放大,错误)

总结:

1. 静态成员函数不能访问普通成员(没this)

2. 常对象不能调用本类的变通成员函数(this指针的权限可能会被放大:const A a; a.fun();

这里fun里的this指针是:A *const this = &a; 将指向const的指针赋给指向非const变量的指针,权力被放大 ),

同样可知道,非const对象可以访问const函数(权限缩小)

3. 类中的常成员函数不能访问变通的成员函数(与上一样)

所以,const函数仅是保留给const对象的接口!!!

4. 类中的静态成员函数不可以访问常成员与常成员函数(与1一样)

5. 常成员函数可以修改静态成员:因为常成员不能修改普通成员的原因是因为const this,

而静态是不要this指针的!!!

对象引用

引用即别名,常引用即不能通过引用修改其指。引用是常指针实现的,但可以认为是不占内存的;

1. 对象做做函数参数,调用拷贝构造函数,值传递,开销大!
2. 对象指针做形参:传递指针开销小
3. 对象引用做形参:不开辟内存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: