C++经典面试题之---String类

转载 2015年11月17日 22:33:41

前段时间,S2的徐*同学去了一家作核能的企业做软件测试,在应聘的时候出了这样一道题目。
写出string类的构造函数,拷贝构造函数,析构函数,赋值函数。
 
这道题目是一道相当经典的C++开发题目,是面试C++程序员时经常考的,但这次无奈徐*碰上了,为什么呢?因为徐* 入职后作的是白盒测试。


#include<iostream>
using namespace std;

class String
{
public:
       String(const char *str=NULL);
       String(const String &other);
       ~String(void);
       String &operator =(const String &other);
private:
       char *m_data;
};

String::String(const char *str)
{
    cout<<"构造函数被调用了"<<endl;
    if(str==NULL)//避免出现野指针,如String b;如果没有这句话,就会出现野
                  //指针
   {
        m_data=new char[1];
        *m_data=''/0'';
    }
    else
    {
      int length=strlen(str);
      m_data=new char[length+1];
      strcpy(m_data,str);
    }
}
String::~String(void)
{
    delete m_data;
    cout<<"析构函数被调用了"<<endl;
}

String::String(const String &other)
{
 cout<<"赋值构造函被调用了"<<endl;
 int length=strlen(other.m_data);
 m_data=new char[length+1];
 strcpy(m_data,other.m_data);
}
String &String::operator=(const String &other)
{
      cout<<"赋值函数被调用了"<<endl;
      if(this==&other)//自己拷贝自己就不用拷贝了
                 return *this;
      delete m_data;//删除被赋值对象中指针变量指向的前一个内存空间,避免
                    //内存泄漏
      int length=strlen(other.m_data);//计算长度
      m_data=new char[length+1];//申请空间
      strcpy(m_data,other.m_data);//拷贝
      return *this;
}
void main()
{
      String b;//调用构造函数
      String a("Hello");//调用构造函数
      String c("World");//调用构造函数
      String d=a;//调用赋值构造函数,因为是在d对象建立的过程中用a来初始化
      d=c;//调用重载后的赋值函数
}

这个题目因为类中有指针变量,使得在建立对象和析构对象的过程中涉及到深拷贝和浅拷贝的问题,还涉及到如何避免内存泄漏的问题。
感觉这道题目,充分考察了C++的一些基本功。学习C++最好的办法,就是找些经典的例题,然后对照编译器来进行学习,肯定会事半功倍的。
 
这道题目已调试通过,可直接运行。

文章出处:http://www.diybl.com/course/3_program/c++/cppsl/20071218/92698.html




FROM: http://blog.csdn.net/shiwei0124/article/details/4417831

c++常见面试题30道

转自:http://blog.csdn.net/shihui512/article/details/9092439; 1.new、delete、malloc、free关系 delete会调用对...
  • wdzxl198
  • wdzxl198
  • 2013年06月15日 19:19
  • 167456

C++面试题(二)——自己实现一个String类

实现一个自己的String类是一道考验C++基础知识的好题。 至少要能实现以下:构造函数,析构函数,拷贝构造函数(copy constructor),重载赋值操作符(copy assignment o...

C++经典面试题之---String类

这个在面试或笔试的时候常问到或考到。 已知类String的原型为: class String { public: String(const char *str = NULL);// 普通构...

c++ 复制控制和智能指针实现

总结了c++中三种复制控制的场合和具体实现方法,在此基础上设计自己的智能指针类。...

c++智能指针的原理与简单实现

一、问题的引入 先看一段简单的代码如下: #include using namespace std; class Person { private: char *name ; public: ...

[经典面试题][百度]c++实现STL中的string类

题目请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。代码/*-------------------------------------...

C/C++面试题:编写类String的构造函数、析构函数和赋值函数。

考点:构造函数、析构函数和赋值函数的编写方法 出现频率:☆☆☆☆☆ 已知类String的原型为:         class String         {         public:...

C++面试题--string类的实现

c++的一个常见的面试题即写一个简单的string类,这个类中应该有着必要的构造函数、复制构造函数、赋值操作符、析构函数等功能,需要很好的处理内存的问题。赋值操作符的多种写法:1.一般的经典写法为(没...

编写String类的构造函数、析构函数以及赋值函数(C++面试题)

这是一道C++面试题:用C++编写一个String类,实现其构造函数、析构函数以及赋值函数 #ifndef STRING_H #define STRING_H #include class ...

C++面试题之模拟实现string类

C++中的string类是一个很常见的面试题,string类里必须有的构造函数,拷贝构造,赋值运算符重载,析构函数等成员函数,下面看看是如何实现以及如何处理动态内存 写时拷贝技术是通过"引用计数"...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++经典面试题之---String类
举报原因:
原因补充:

(最多只允许输入30个字)