#pragma warning(disable:4996)
#ifndef _String_H_
#define _String_H_
#include <stdlib.h>
#include <stdio.h>
#include <cstring>
#include <iostream>
using std::cout;
using std::endl;
class String
{
public:
String(const char*rhs=0);
String(const String& rhs);
String& operator=(const String& rhs);
~String();
public:
void test_this()
{
printf("this:%x\n", this);
}
void test_this_()
{
printf("*this:%x\n", *this);
}
private:
char* data;
};
inline
String::String(const char* rhs)
{
if (rhs)
{
data = (char*)malloc((strlen(rhs)) + 1);
strcpy(data, rhs);
}
else
{
data = (char*)malloc(1);
*data = '\0';
}
}
inline
String::String(const String& rhs)
{
data = (char*)malloc((strlen(rhs.data))+1) ;
strcpy(data,rhs.data);
}
inline
String& String:: operator=(const String& rhs)
{
if (this==&rhs)
{
return *this;
}
delete[] data;
data = (char*)malloc(strlen(rhs.data) + 1);
strcpy(data, rhs.data);
return *this;
}
String::~String()
{
free(data);
}
#endif _String_H_
int main()
{
String tmp("hello!");
tmp.test_this();
tmp.test_this_();
printf("tmp:%x\n", tmp);
printf("&tmp:%x\n", &tmp);
return 0;
}
this 是指针 ,*this是指针的值,也就是这个对象本身,ByRefence类似于别名,ByValue传递参数会进行拷贝,而指针和引用不会,实际上还是原来的那个对象的地址,完全一致。