jQuery火箭图标返回顶部代码

c++(类) this指针

this指针的相关概念:

          this只能在成员函数中使用。全局函数,静态函数都不能使用this。实际上,成员函数默认第一个参数为T* const register this。

          为什么this指针不能再静态函数中使用?

          大家可以这样理解,静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,

           所以this指针当然不能被静态函数使用了,同理,全局函数也一样,我是这样理解的,不知道大家怎样理解,大家可以评论交流下。

 

(1)this指针是什么时候创建的?

            this在成员函数的开始执行前构造的,在成员的执行结束后清除。

 

(2)this指针如何传递给类中函数的?绑定?还是在函数参数的首参数就是this指针.那么this指针又是如何找到类实例后函数的?

            this是通过函数参数的首参数来传递的。this指针是在调用之前生成的。类实例后的函数,没有这个说法。类在实例化时,只分配类中的变量空间,并没有为函数分配空间。

            自从类的函数定义完成后,它就在那儿,不会跑的。

 

(3)this指针只有在成员函数中才有定义。因此,你获得一个对象后,也不能通过对象使用this指针。所以,我们也无法知道一个对象的this指针的位置(只有在成员函数

            里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。

 

 

this指针的使用:

       一种情况就是,在类的非静态成员函数中返回类对象本身的时候,我们可以使用圆点运算符(*this).,箭头运算符this->,另外,我们也可以返回

关于*this的引用,这样我们可以像输入输出流那样进行“级联”操作。

示例如下:

1:(普通)

 1 #include "stdafx.h"
 2 #include<iostream>  
 3 #include<string>  
 4 using namespace std;
 5 class Stu_Info_Mange
 6 {
 7     int sno;
 8     string sname;
 9     int age;
10     int grade;
11 public:
12     Stu_Info_Mange(int s = 0, string n = "none", int a = 0, int g = 0)
13     {
14         sno = s;
15         sname = n;
16         age = a;
17         grade = g;
18     }
19     void Setsname(std::string sn)   //使用this指针进行赋值  
20     {
21         this->sname = sn;
22     }
23     int  Setage(int a)
24     {
25         this->age = a;
26         return (*this).age; //使用this指针返回该对象的年龄  
27     }
28     void show()
29     {
30         cout << "the sname is " << this->sname << endl;  //显式this指针通过箭头操作符访问  
31         cout << "the sno   is " << sno << endl;//隐式使用this指针打印  
32         cout << "the age   is " << (*this).age << endl;//显式使用this指针通过远点操作符  
33         cout << "the grade is " << this->grade << endl << endl;
34     }
35 
36 };
37 int main()
38 {
39     Stu_Info_Mange p1(761, "张三", 19, 3);
40     p1.show();  //输出信息 
41     p1.Setage(12); //使用this指针修改年龄 
42     p1.Setsname("王五");
43     p1.show();     //再次输出  
44     return 0;
45 }

 

2:(使用类)

Stu_Info_Mange.h

 1 #pragma once
 2 #include<string>
 3 using std::string;
 4 class Stu_Info_Mange
 5 {
 6 private:
 7     int sno;
 8     string sname;
 9     int age;
10     int grade;
11 public:
12     Stu_Info_Mange(int s = 0, string n = "none", int a = 0, int g = 0);
13     void Setsname(string sn) { this->sname = sn; }
14     int  Setage(int a);
15     void show()const;
16     ~Stu_Info_Mange();
17 };

 

Stu_Info_Mange.cpp

 1 #include "stdafx.h"
 2 #include "Stu_Info_Mange.h"
 3 #include<iostream>
 4 #include<string>
 5 using namespace std;
 6 Stu_Info_Mange::Stu_Info_Mange(int s, string n, int a, int g)
 7 {
 8     sno = s;
 9     sname = n;
10     age = a;
11     grade = g;
12 }
13 
14 int Stu_Info_Mange::Setage(int a)
15 {
16     this->age = a;
17     return (*this).age;
18 }
19 
20 void Stu_Info_Mange::show() const
21 {
22     cout << "the sname is " << this->sname << endl;
23     cout << "the sno   is " << sno << endl;
24     cout << "the age   is " << (*this).age << endl;
25     cout << "the grade is " << this->grade << endl << endl;
26 }
27 
28 Stu_Info_Mange::~Stu_Info_Mange()
29 {
30 }

ConsoleApplication.cpp

 1 #include "stdafx.h"
 2 #include "Stu_Info_Mange.h"
 3 #include<iostream>
 4 #include<string>
 5 using namespace std;
 6 int main()
 7 {
 8     Stu_Info_Mange p1(761, "张三", 19, 3);
 9     p1.show();  //输出信息 
10     p1.Setage(12); //使用this指针修改年龄 
11     p1.Setsname("王五");
12     p1.show();     //再次输出  
13     return 0;
14 }

 

输出结果:

posted @ 2018-04-21 00:11  迷途纸鸢  阅读(490)  评论(0编辑  收藏  举报