C++ this指针了解

1、this理解:所有非静态成员函数的this指向它的调用者 ;

2、调用构造函数时,派生类与基类构造中的this和p1都指向下面这个匿名堆对象的首地址;

      Person* p1 = new Man("aaa",10,1); 

3、另外注意单例函数调用addUser(this),实参this与函数体内的this不同;

4、代码直接从第47行看就行;

// Example program
#include <iostream>
#include <string>

using namespace std;

class Person;

class Singleton
{
public:
	static Singleton* Instance();
	~Singleton();
	void addUser(Person* p);
private:
	Singleton(){}
	static Singleton* sin;
	Person* myArray[10];
};

Singleton* Singleton::sin = NULL;

Singleton* Singleton::Instance()
{
	if(sin == NULL)
	{
		sin = new Singleton();  //啥 要考虑多线程,那改用饿汉式好了
	}
	return sin;
}

Singleton::~Singleton()
{
    if(sin != NULL)
    {
        delete sin;
    }
}

void Singleton::addUser(Person* p)
{
	myArray[0] = p;
	cout << "myArray[0]: " << myArray[0] << endl;
	cout << "Singleton this: " << this << endl;
}

class Person
{
public:
    Person(string name, int age)
    :mName(name), mAge(age)
    {
	cout << "Person this: " << this << endl;
	//Singleton::Instance()->addUser(this);
    }
    
    ~Person(){}
    
    /*void show() const
    {
        cout << "this: " << this << endl;
        cout << "this: " << this->mName << endl;
        cout << "this: " << this->mAge << endl;
    }*/
    
private:
    string mName;
    int mAge;
};

class Man : public Person
{
public:
	Man(string name, int age, int flag)
	:Person(name, age),mFlag(flag)
	{
		cout << "Man this: " << this << endl;
		Singleton::Instance()->addUser(this);//这里也可用静态函数 or others
	}

private:
	int mFlag;
};

int main()
{
	Person* p1 = new Man("aaa",10,1);
	cout << "p1:       " << p1 << endl;
	cout << "-------------------------" << endl;

//Man a("aaa",10,1);
//Man("aaa",10,1);

    //Man* p2 = new Man("bbb",20,0);
    //cout << "p2:       " << p2 << endl;
    //p.show();
    
    return 0;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值