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;
}