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

来源:互联网 发布:java递归算法40例 编辑:程序博客网 时间:2024/05/29 13:40

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


0 0