C++编译器会在背后做许多事情, 这也是C++复杂的原因之一。 比如, 如果你写了一个空类:
#include <iostream>
using namespace std;
class Empty
{
};
int main()
{
return 0;
}
实际上就好像写了如下的程序一样:
#include <iostream>
using namespace std;
class Empty
{
public:
Empty()
{
}
Empty(const Empty &e)
{
}
Empty& operator=(const Empty &e)
{
}
~Empty()
{
}
};
int main()
{
return 0;
}
当然, 当需要这些方法的时候, 编译器才会创建他们。 其实, 可以说, 我们几乎随时需要他们。
有时候, 如果你参加笔试面试, 有可能会考编译器创建的默认方法, 以上四个基本的方法, 是肯定需要回答出来的。
有时候, 面试官要你写一个类, 那么, 上述四个方法肯定是必须的, 下面, 我们给出一个简要的string类, 来给本文结尾:
#include <iostream>
using namespace std;
class TaogeString
{
private:
char *m_p;
public:
TaogeString(char *p = NULL)
{
if(NULL == p)
{
m_p = new char[1];
m_p[0] = '\0';
}
else
{
int len = strlen(p);
m_p = new char[len + 1];
strcpy(m_p, p);
}
}
TaogeString(const TaogeString &a)
{
int len = strlen(a.m_p);
m_p = new char[len + 1];
strcpy(m_p, a.m_p);
}
TaogeString& operator=(const TaogeString &a)
{
if(&a == this) // 处理自我赋值
{
return *this;
}
delete m_p;
int len = strlen(a.m_p);
m_p = new char[len + 1];
strcpy(m_p, a.m_p);
return *this;
}
~TaogeString()
{
delete []m_p;
m_p = NULL;
}
void print()
{
cout << m_p << endl;
}
};
int main()
{
TaogeString a("good");
a.print();
return 0;
}
OK, 先说到这里。