汕头模板建站流程,黄山旅游攻略自助游,网站建设参考网站的说明书,wordpress 开发分销class Person
{
public:int m_A;//非静态成员变量#xff0c;属于对象上void func(/*Person * this*/){}; //非静态成员函数 不属于对象身上static int m_B;//静态成员函数#xff0c;不属于对象上static void fun2(){};//静态成员函数 #xff0c;不属于对象身上//double …class Person
{
public:int m_A;//非静态成员变量属于对象上void func(/*Person * this*/){}; //非静态成员函数 不属于对象身上static int m_B;//静态成员函数不属于对象上static void fun2(){};//静态成员函数 不属于对象身上//double m_C;//12错误 16正确,解决方法#pragma pack(1)
};
void test02()
{//this指针指向被调用的成员函数Person p1;p1.func(); //编译器会偷偷 加入一个this指针 Person * this Person p2;p2.func();
}C编译器给每个“成员函数“增加了一个隐藏的指针参数让该指 针指向当前对象(函数运行时调用该函数的对象)在函数体中所有成员变量的操作都是通过该指针去访 问。只不过所有的操作对用户是透明的即用户不需要来传递编译器自动完成。
this指针使用
指针永远指向当前对象解决命名冲突*this指向对象的本体非静态成员函数才有this指针
this指针的类型 类类型* const 只能在“成员函数”的内部使用 this指针本质上其实是一个成员函数的形参是对象调用成员函数时将对象地址作为实参传递给this 形参。所以对象中不存储this指针。 this指针是成员函数第一个隐含的指针形参一般情况由编译器通过ecx寄存器自动传递不需要用户 传递 #includeiostreamusing namespace std;// this 可以解决命名冲突class Person{public:Person(int age){this-age age;}//对比年龄void compareAge(Person p){if (this-age p.age){cout 相等 endl;}else{cout 不相等 endl;}}//年龄相加Person PlusAge(Person p){this-age age;return *this; //*this指向对象的本体}int age;};void test01(){Person p1(10);cout p1的年龄 p1.age endl;Person p2(10);p1.compareAge(p2);p1.PlusAge(p2).PlusAge(p2);//链式编程//函数返回值作为左值 返回引用cout p1的年龄 p1.age endl;}int main(){test01();system(pause);return 0;}