关于C++中this指针

        【本博客中关于C++和QT,无特别说明开发环境为:Visual studio 2013,QT为5.9.9,特此说明,谨慎参考,希望能帮助到爱好者!】

        【提醒:c++中关于.和->区别,都是用于成员选择,基于.表示对象名称选择成员,->表示对象指针选择成员。】

         c++变量的作用域:如果函数形参跟类的内部的变量重名,在函数内部,c++会仍然使用函数形参如下例子:

   

#include<iostream>
using namespace std;
class Teacher{
	private:
		char *tea_name;
		int tea_age;
		char *tea_address;
	public:
		void setName(char *tea_name);
		void setAge(int tea_age);
		Teacher(char *name,int age,char *address);//声明构造函数
		void display();//声明普通函数

};
Teacher::Teacher(char *name,int age,char *address){
	tea_name=name;
	tea_age=age;
	tea_address=address;
}
void Teacher::setAge(int tea_age){
	tea_age=tea_age;
}
void Teacher::setName(char *tea_name){
	tea_name=tea_name;
}
void Teacher::display(){
	cout<<"姓名:"<<tea_name<<"\n年龄:"<<tea_age<<"\n地址:"<<tea_address<<endl;
}
int main(){
	Teacher tea("张三",34,"北京市海淀区");
	tea.setName("李四");
	tea.setAge(45);
	tea.display();
	Teacher *t=new Teacher("黄亮",46,"河南省");
	t->setName("周明");
	t->setAge(20);
	t->display();
	return 0;
}

结果是:

姓名:张三
年龄:34
地址:北京市海淀区
姓名:黄亮
年龄:46
地址:河南省

下面调整后:

#include<iostream>
using namespace std;
class Teacher{
	private:
		char *tea_name;
		int tea_age;
		char *tea_address;
	public:
		void setName(char *tea_name);
		void setAge(int tea_age);
		Teacher(char *name,int age,char *address);//声明构造函数
		void display();//声明普通函数

};
Teacher::Teacher(char *name,int age,char *address){
	tea_name=name;
	tea_age=age;
	tea_address=address;
}
void Teacher::setAge(int tea_age){
	this->tea_age=tea_age;
}
void Teacher::setName(char *tea_name){
	this->tea_name=tea_name;
}
void Teacher::display(){
	cout<<"姓名:"<<tea_name<<"\n年龄:"<<tea_age<<"\n地址:"<<tea_address<<endl;
}
int main(){
	Teacher tea("张三",34,"北京市海淀区");
	tea.setName("李四");
	tea.setAge(45);
	tea.display();
	Teacher *t=new Teacher("黄亮",46,"河南省");
	t->setName("周明");
	t->setAge(20);
	t->display();
	return 0;
}

输出结果正确了!

      类的外部定义成员函数时必须同时提供类名和函数名。在类的内部定义的成员函数不需要提供类名,成员函数内部调用类定义的变量和类型,无需提供类名。

1、类作用域中,类的非静态成员函数可以直接访问类的其他任何成员。
2、在类作用域外,只能通过类的对象、指针、引用访问类成员,此时类成员转变成了对象成员。
3、类中成员函数定义的局部变量具有程序块作用域,如果有重名,作用域内层的会遮蔽作用域外层的。
4、想要访问重名的作用域相同的函数或变量,可以使用this指针和二元运算符作用域解析符(::)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值