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).
  • 相关阅读:
    R安装程序包:ERROR: failed to lock directory ‘/usr/lib64/R/library’ for modifying
    clusterProfiler
    R 画图保存为文件
    网站支持https之一:https原理和SSL证书类型
    Https系列之一:https的简单介绍及SSL证书的生成
    What is the difference between a directory and a folder?
    漫画解读:通过造车来了解软件开发模式 DevOps
    Multicast delegate of type Func (with return value)?
    What are good ways to prevent SQL injection? [duplicate]
    SqlCommand.Prepare Method
  • 原文地址:https://www.cnblogs.com/hugeng007/p/9335270.html
Copyright © 2011-2022 走看看