/* Human.h */
#include <string>
/*
* this指当前对象的地址
*/
class Human
{
private:
char* name;
public:
Human(const char* initString); //变量若不允许函数修改,最好定义成const变量
~Human();
void getObjName();
};
/*Human.cpp*/
#include <iostream>
#include <string>
#include <string.h>
#include "Human.h"
void Human::getObjName()
{
printf("1 this = 0x%x\n", this); //此对象的地址
}
Human::Human(const char* initString)
{
std::cout << "2 call Human()" << std::endl;
name = new char[strlen(initString) + 1];
}
/*析构函数(对象被销毁时被调用,类只有一个析构函数*/
Human::~Human()
{
std::cout << "3 call ~Human()" << std::endl;
}
#include <iostream>
#include "Human.h"
int main()
{
Human* man = new Human("aaaa"); //此处第一次调用构造函数
printf("man addr = 0x%x\n", man); //打印对象的地址,跟对象内部的this是同一个值
man->getObjName();
delete man;
return 0;
}
输出:
2 call Human()
man addr = 0x62b918 //两个地址一样,表面this为对象地址
1 this = 0x62b918
3 call ~Human()