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. 对象引用做形参:不开辟内存
相关文章推荐
- Lesson_for_java_day09--练习--继承、this、super的使用、使用构造方法赋初始值
- [转载] New Concept English 1——Lesson 12 Whose is this…?This is my/your/her…
- Lesson_for_java_day08--类的属性和方法、类的封装性、构造函数和this的使用
- 硕英精读答案 lesson 9-12
- 如何使用.net读取PKCS12格式数字证书
- Lesson 11 Is this your shirt?
- Lesson4 MFC消息映射机制和CDC类的使用 ---孙鑫VC++教程
- Create "Notepad" in 12 minutes in this tutorial
- 浅谈 Java 中 this 的使用
- [读prototype] 深入javascript的动态性和'this'的使用
- Lesson Eleven Is this your shirt? 这是你的衬衫吗?
- this关键字的使用(摘录Thinking In Java)
- 浅谈Java中this的使用
- Lesson 11 Is this your shirt?
- Java关键字this、super使用总结
- 使用VS2005新功能的Tips:this.Validate();这一句话,让我找了好久。
- Listen to this lesson1
- this指针的详细说明与使用
- Atlas学习手记(12):使用CascadingDropDown控件
- JScript中的"this"关键字使用方式补充材料