C++笔试题经典的两个

原创 2015年07月10日 14:46:59
//实现一个自己版本的string。
#include <iostream>
#include <string.h>
using namespace std;

class String
{
public:
    String(const char *s = "")
    {
        str = new char[strlen(s) + 1];
        copy(str,s);
    }
    ~String()
    {
        if (str != NULL)
        {
            delete[]str;
            str = NULL; 
        }
    }
    String(const String &s)
    {
        str = new char[strlen(s.str) + 1];
        copy(str,s.str);
    }
    String& operator=(const String &s)
    {
        String sp(s.str);
        if (this != &s)
        {
            char *temp = str;
            str = sp.str;
            sp.str = temp;
        }
        return *this;
    }
    void Printf()
    {
        cout << str << endl;
    }
    friend  istream& operator>>(istream &is,String& s)
    {
        char *str = new char[30];
        is >> str;
        String temp(str);
        s = temp;
        return is;
    }
    friend ostream& operator << (ostream &out, String& s)
    {
        out << s.str;
        return out;
    }
private:
    void copy(char *dist,const char *src)
    {
        strcpy(dist,src);
    }
private:
    char *str;
};
int main()
{
    String s;
    cin >> s;
    cout << s<<endl;
    return 0;
}


#include <iostream>
using namespace std;
//实现一个简单的智能指针。
template<typename Type>
class my_auto
{
public:
    my_auto(Type *p) :ptr(p)
    {
        count = new int[1];
        count[0] = 1;
    }
    my_auto(const my_auto<Type>& ma)
    {
        ptr = ma.ptr;
        count = ma.count;
        count[0]++;
    }
    my_auto& operator=(const my_auto &ma)
    {
        if (this != &ma)
        {
            this->~my_auto();
            ptr = ma.ptr;
            count = ma.count;
            count[0]++;
        }
        return *this;
    }
    ~my_auto()
    {
        if (count[0]-- == 1)
        {
            cout << "free" << endl;
            delete ptr;
            ptr = NULL;
            delete[]count;
            count = NULL;
        }
    }
    Type& operator*()
    {
        return *ptr;
    }
    Type* operator->()
    {
        return ptr;
    }
private:
    Type *ptr;
    int *count;
};
int main()
{
    my_auto<int> sp(new int(3));
    my_auto<int> sb(sp);
    my_auto<int> sa(new int(100));
    sa = sb;
    //cout << *sp << endl;
    return 0;
}

相关文章推荐

另解,c/c++有趣的经典笔试题:不用判断语句求得两个整数的最大值

另解,c/c++笔试题:不用判断语句求得两个整数的最大值                                                                       ...

经典基础C++笔试题(附答案)

一、选择题 1. 若用数组名作为函数调用时的实参,则实际上传递给形参的是( A ) A. 数组首地址 B. 数组的第一个元素值 C. 数组中全部元素的值 D. 数组元素的个数 2. 有关函数重载的正确...

经典C++笔试题收藏

1.求下面函数的返回值(微软) int func(x)  {      int countx = 0;      while(x)      {            countx ++;...

很经典的C++笔试题(附答案)

很经典的C++笔试题(附答案) 2008-09-12 20:11 5769人阅读 评论(5) 收藏 举报 c++vector编译器classiteratorstruct 1. 以下三条输...

面试题——C/C++经典问题,及面试笔试题

c语言中指针变量可以相加吗?其含义是什么? 指针变量是有加减运算的,但是要注意以下几点: 1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指...

C++经典笔试题详解

1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问...

经典基础C++笔试题2(附答案)

1. C中static有什么作用? (1)隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担...

C++经典笔试题及参考答案-趋势科技

1、static有什么用途?(请至少说明两种) 答案:1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用...

C\C++笔试题 经典的

  • 2011年07月29日 19:46
  • 51KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++笔试题经典的两个
举报原因:
原因补充:

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