static,this指针

左心房为你撑大大i 提交于 2020-03-04 00:05:09

标题 this和static

老师上课讲这一块内容的时候,就不理解。现在把他整理一下。

①this指针:指向成员函数所指向的对象
-------------理解this指针,首先将C++翻译成C

class Test              
{                       
public:                 
	int num;             
	void set(int n)
	{
		num = n;	
	}
};
int main()
{
	Test t;
	t.set(20);
	return 0;
}
struct Test
{
	int num;
};
void set(struct Test* this, int n)
{
	this->num = n;
}
int main()
{
	struct Test t;
	set(&t ,20);
	return 0;
}

-----------再来看下面这段程序,理解this指针

class Test              
{                       
public:                 
	int p;             
	Test set(int p)
	{
		this->p++;
		return *this;
	}
};

class A
{
public:
    int i = 0;
    void print()
    {
        cout << i << "hello" << endl;
    }
    //void print(A* this)
    //{
    //    cout << this->i << "hello" << endl;
    //}
};
int main()
{
    A* p = NULL;
    p->print();//  print(p) 不会输出i,会输出hello;
    return 0;
}

②static:
----------------普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象共享。并不具体作用与某一个对象。本质上是全局变量。

访问静态成员的四种方法:(静态成员函数不能访问非静态成员变量,不能调用非静态成员函数)

using namespace std;
class Test              
{                       
public:                 
	int p;             
	static int q;
	static void func()
	{
		cout << q << endl;
	}
};
int Test::q = 1;
int main()
{
	Test::func();//类名::成员名
	
	Test t;
	t.func();//对象名.成员名
	
	Test* m;
	m->func();//指针->成员名
	
	Test n;//引用.成员名
	Test& num = n;
	num.func();
}

--------------sizeof运算符不会计算静态成员变量。

class Test              
{                       
public:                 
	int p;             
	static int q;
};
得到结果:sizeof(Test) == 4;
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!