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,  先说到这里。

 

 


本文转载:CSDN博客