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:(普通)
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
class Stu_Info_Mange
{
int sno;
string sname;
int age;
int grade;
public:
Stu_Info_Mange(int s = , string n = "none", int a = , int g = )
{
sno = s;
sname = n;
age = a;
grade = g;
}
void Setsname(std::string sn) //使用this指针进行赋值
{
this->sname = sn;
}
int Setage(int a)
{
this->age = a;
return (*this).age; //使用this指针返回该对象的年龄
}
void show()
{
cout << "the sname is " << this->sname << endl; //显式this指针通过箭头操作符访问
cout << "the sno is " << sno << endl;//隐式使用this指针打印
cout << "the age is " << (*this).age << endl;//显式使用this指针通过远点操作符
cout << "the grade is " << this->grade << endl << endl;
} };
int main()
{
Stu_Info_Mange p1(, "张三", , );
p1.show(); //输出信息
p1.Setage(); //使用this指针修改年龄
p1.Setsname("王五");
p1.show(); //再次输出
return ;
}
2:(使用类)
Stu_Info_Mange.h
#pragma once
#include<string>
using std::string;
class Stu_Info_Mange
{
private:
int sno;
string sname;
int age;
int grade;
public:
Stu_Info_Mange(int s = , string n = "none", int a = , int g = );
void Setsname(string sn) { this->sname = sn; }
int Setage(int a);
void show()const;
~Stu_Info_Mange();
};
Stu_Info_Mange.cpp
#include "stdafx.h"
#include "Stu_Info_Mange.h"
#include<iostream>
#include<string>
using namespace std;
Stu_Info_Mange::Stu_Info_Mange(int s, string n, int a, int g)
{
sno = s;
sname = n;
age = a;
grade = g;
} int Stu_Info_Mange::Setage(int a)
{
this->age = a;
return (*this).age;
} void Stu_Info_Mange::show() const
{
cout << "the sname is " << this->sname << endl;
cout << "the sno is " << sno << endl;
cout << "the age is " << (*this).age << endl;
cout << "the grade is " << this->grade << endl << endl;
} Stu_Info_Mange::~Stu_Info_Mange()
{
}
ConsoleApplication.cpp
#include "stdafx.h"
#include "Stu_Info_Mange.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
Stu_Info_Mange p1(, "张三", , );
p1.show(); //输出信息
p1.Setage(); //使用this指针修改年龄
p1.Setsname("王五");
p1.show(); //再次输出
return ;
}
输出结果:

c++(类) this指针的更多相关文章
- delete 类对象指针的注意事项]
http://blog.csdn.net/infoworld/article/details/45560219 场景:1. C++类有构造和析构函数,析构函数是在类对象被delete时(或局部变量自动 ...
- c++中的类的对象与类的指针
以上内容来自:http://wenku.baidu.com/link?url=haeRBhswlEcqddk48uW8YVMsdFNWsllimn_dzUYchb6G9NdT4pqgluCpnLQId ...
- C++ 虚基类表指针字节对齐
下面博客转载自别人的,我也是被这个问题坑了快两天了,关于各种虚基类,虚继承,虚函数以及数据成员等引发的一系列内存对齐的问题再次详细描述 先看下面这片代码.在这里我使用了一个空类K,不要被这个东西所迷惑 ...
- C++ Primer 有感(管理类的指针成员)
C++类的指针成员与其他成员有所不同,指针成员指向一个内存地址,该地址的内存需要我没管理. 我现在分析一下为什么要管理指针成员. 有如下Student类,Student.h如下: [cpp] view ...
- C/C++基础----特殊工具和技术 (重载new和delete,RTT,限定作用域的枚举类型,类成员指针,嵌套类,局部类,volatile,链接指示 extern “C”)
重载new和delete 1调用operator new( 或new[])标准库函数分配足够大的.原始的.未命名的内存空间以便存储特定类型的对象 2编译器运行相应地构造函数以构造这些对象,并为其传入初 ...
- C++中的类成员指针
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- mfc 类对象指针
类对象指针 一.类对象指针定义 Tdate d1; Tdate *p1=&d1; Tdate *p2=(Tdate *)malloc(sizeof(Tdate)); 二.类对象指针使用 int ...
- 【c++】类管理指针成员
c++编程提倡使用标准库,一个原因是标准库大胆减少对指针的使用.但是许多程序是离不开指针的.包含指针的类需要特别注意复制控制,原因是复制指针时只复制指针中的地址,而不复制指针所指向的对象.这样当把一个 ...
- YTU 2636: B3 指向基类的指针访问派生类的成员函数
2636: B3 指向基类的指针访问派生类的成员函数 时间限制: 1 Sec 内存限制: 128 MB 提交: 433 解决: 141 题目描述 领导类(Leader)和工程师类(Engineer ...
- MFC中获取App,MainFrame,Doc和View类等指针的方法
From: http://hi.baidu.com/wxnxs/item/156a68f5b3b4ed18e3e3bd03 MFC中获取App,MainFrame,Doc和View类等指针的方法 ...
随机推荐
- python2.7练习小例子(十五)
15):题目:输出指定格式的日期. 程序分析:使用 datetime 模块. 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...
- oracle 数据被修改怎么修复?(闪回)
数据被删除 或者 update 的时候忘记勾选where 限制条件,数据全部更新了? 怎么办? 要跑路了? NO !!! 看下面,迅速帮你闪回数据! demo sql: 1. SELECT * FR ...
- django生产环境中部署
https://www.cnblogs.com/chenice/p/6921727.html 本节内容 uwsgi 介绍 uwsgi安装使用 nginx安装配置 django with nginx 如 ...
- 源码-集合:ArrayList
只是文章摘录,还未研究 JAVA ArrayList详细介绍(示例) http://www.jb51.net/article/42764.htm Jdk1.6 JUC源码解析汇总 - 永远保持敬畏之心 ...
- Kotlin操作符重载:把标准操作加入到任何类中(KAD 17)
作者:Antonio Leiva 时间:Mar 21, 2017 原文链接:https://antonioleiva.com/operator-overload-kotlin/ 就像其他每种语言一样, ...
- JVM 什么时候会触发FGC
1:System.gc(); 2:老年代满了 没啥好说的从年轻代去往老年代的 3:JDK7或JDK6中永久区满了 得看是否还会有分配,如果没有就不会进行FGC,不过CMS GC下会看到不停地CMS G ...
- 牛客 小a与星际探索
链接:https://ac.nowcoder.com/acm/contest/317/C来源:牛客网 小a正在玩一款星际探索游戏,小a需要驾驶着飞船从1号星球出发前往n号星球.其中每个星球有一个能量指 ...
- BZOJ 1565 NOI2009 植物大战僵尸 topo+最小割(最大权闭合子图)
题目链接:https://www.luogu.org/problemnew/show/P2805(bzoj那个实在是有点小小的辣眼睛...我就把洛谷的丢出来吧...) 题意概述:给出一张有向图,这张有 ...
- Daily Scrum02 12.02
今天是黑色星期一,虽然大家最近被各种大作业压得身心疲惫,但是团队的凝聚力战胜了一切不快. 看看同志们今天的战绩,是不是又有一种充实感油然而生呢??? By Ryan Mao who? Today? T ...
- 编程练习:寻找发帖"水王"
题目: 寻找发帖"水王" 来源: 编程之美 分析 衍生:就是给定一个数组,其中某个元素出现次数超过了数组长度的一半,找出这个元素 方法s 方法1 对这个串进行遍历,同时对出现的元素 ...