您的位置:首页 > 编程语言 > C语言/C++

Effective C++条款05解读: 了解C++默默编写并调用哪些函数

2015-06-16 22:55 645 查看
       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,  先说到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: