zoukankan      html  css  js  c++  java
  • the pointer this

    The First Column The Second Column
    attribute [e'tribute]n.属性
    choose start menu folder 选择“开始”菜单文件夹
    expired 期满的
    expire 期满
    scratch 擦,刮,adj,打草稿用的,随便写的
    
    #include <iostream>
    using namespace std;
    
    class Student {
    public:
    	void setname(char *name);
    	void setage(int age);
    	void setscore(float score);
    	void show();
    private:
    	char *name;
    	int age;
    	float score;
    };
    
    void Student::setname(char *name) {
    	this->name = name;
    }
    void Student::setage(int age) {
    	this->age = age;
    }
    void Student::setscore(float score) {
    	this->score = score;
    }
    void Student::show() {
    	cout << this->name << "的年龄是" << this->age << ",成绩是" << this->score << endl;
    }
    
    int main() {
    	Student *pstu = new Student;
    	pstu->setname("李华");
    	pstu->setage(16);
    	pstu->setscore(96.5);
    	pstu->show();
    
    	return 0;
    }
    

    The Result:李华的年龄是16,成绩是96.5

    • This can only be used inside the class,and all members of the calss can be accessed through this,including private,protected and public attributes.
    • In this example,the name of the member functions' parameters are the same as those of member functions' variables,It can only be distinguished by this.
    • Take the member function setname(char* name) for example,its parameter is name,and the member variable name is named,if you write name=name;such a statement is to assign a parameter to the parameter name,instead of assigning the member variable name.And writing this -> name=name;,the name on the left is the member variable,and the name on the right is the parameter,which is clear at a glance.
    • This is a pointer to access member variables or member functions with ->
    • This is used whthin the class,but only when the object is created will it be assigned to this,and the process of the assignment is done automatically by the compiler,without user intervention,and the user can not explicitly assign a value to the this.In this this case,the value of this is the same as that of pstu.

    Adding a member function(printThis()) in class Student to specially print the value of this:

    void Student::printThis(){
    	cout<<this<<endl;
    }
    

    then create an object in the main() function and call printThis():

    #include <iostream>
    using namespace std;
    
    class Student {
    public:
    	void setname(char *name);
    	void setage(int age);
    	void setscore(float score);
    	void show();
    	void printThis();
    private:
    	char *name;
    	int age;
    	float score;
    };
    
    void Student::setname(char *name) {
    	this->name = name;
    }
    void Student::setage(int age) {
    	this->age = age;
    }
    void Student::setscore(float score) {
    	this->score = score;
    }
    void Student::show() {
    	cout << this->name << "的年龄是" << this->age << ",成绩是" << this->score << endl;
    }
    void Student::printThis() {
    	cout << this << endl;
    }
    int main() {
    	Student *pstu = new Student;
    	pstu->setname("李华");
    	pstu->setage(16);
    	pstu->setscore(96.5);
    	pstu->show();
    	
    	Student *pstu1 = new Student;
    	pstu1->printThis();
    	cout << pstu1 << endl;
    	
    	Student *pstu2 = new Student;
    	pstu2->printThis();
    	cout << pstu2 << endl;
    
    	return 0;
    }
    
    • The result:
    李华年龄是16,成绩是96.5
    0000026391651120
    0000026391651120
    0000026391651580
    0000026391651580
    

    It can be found that this does point to the current object,and for different objects,the value of this is different.

    A few notes:

    • This is const pointer,its value can not be modified,all attempts to modify the pointer's operation,such as assignment,increment,decrement and so on,are not allowed.
    • 'This' can only be used inside the memeber function,and it is illegal to use it elsewhere.
    • 'This' is meaningful only when the object is created,so it can not be used in the static member function(followed by static members).
  • 相关阅读:
    最小圆覆盖
    BZOJ3572 [Hnoi2014]世界树 【虚树 + 树形dp】
    一些组合数学
    BZOJ3611 [Heoi2014]大工程 【虚树】
    线段树合并
    BZOJ4446 [Scoi2015]小凸玩密室 【树形Dp】
    生成函数小记
    BZOJ2337 [HNOI2011]XOR和路径 【概率dp + 高斯消元】
    连续数字异或和
    POJ2976:Dropping tests——题解
  • 原文地址:https://www.cnblogs.com/hugeng007/p/9335270.html
Copyright © 2011-2022 走看看