在C++笔试中常见的题目解析

来源:互联网 发布:阿里云域名解析后 编辑:程序博客网 时间:2024/06/01 09:04

我看了一些资料,找到一些在笔试中常用到的题目的解析,自己从中挑了一些作为练习,拿出来供大家参考!
直接以代码的形式给出了部分题目的解析代码!与君共勉之!

//在C++笔试中常见的题目解析#include <iostream>#include <algorithm>#include <time.h>using namespace std;//1.链表反转class ReverseLink{public:    ReverseLink()    {        head=NULL;    }    ~ReverseLink()    {        while(head)        {            LinkNode* tmp=head->next;            delete head;            head=tmp;        }    }public:    void createLink()    {        head=new LinkNode();        LinkNode* pH=head;        srand((unsigned int)time(NULL));        for(int i=0;i<10;i++)        {            LinkNode* pTmp=new LinkNode();            pTmp->next=NULL;            pTmp->data=rand();            pH->next=pTmp;            pH=pTmp;        }        pH->next=NULL;    }    void OutPut()    {        LinkNode* pH=head->next;        while(pH!=NULL)        {            cout << pH->data << " ";            pH=pH->next;        }        cout << endl;    }    void MyReverse()    {        if(head==NULL || head->next==NULL)            return ;        LinkNode *next,*cur;        cur=head->next;        head->next=NULL;        while(cur)        {            next=cur->next;            cur->next=head->next;            head->next=cur;            cur=next;        }    }private:    typedef struct _Link    {        int data;        struct _Link* next;    }LinkNode;    LinkNode* head;};//2.自定义实现String类的功能#include <string>#include <string.h>using namespace std;class MyString{public:    MyString(){ m_data=NULL; }    MyString(const char*str=NULL)    {        if(str==NULL)        {            m_data=new char[1];            m_data[0]='\0';        }        else        {            if(m_data)                delete []m_data;            m_data=new char[strlen(str)+1];            strcpy(m_data,str);        }    }    MyString(const MyString&another)    {        if(another.m_data!=NULL)        {            if(m_data!=NULL)                delete []m_data;            m_data=new char[strlen(another.m_data)+1];            strcpy(m_data,another.m_data);        }    }    ~MyString()    {        if(m_data!=NULL)            delete []m_data;    }public:    MyString& operator=(const MyString&rhs)    {        if(this==&rhs)            return *this;        if(m_data!=NULL)            delete []m_data;        m_data=new char[strlen(rhs.m_data)+1];        strcpy(m_data,rhs.m_data);        return *this;    }private:    char* m_data;};//3.请编写自己的strcpy()char* MyStrcpy(char* strDest,const char* strSrc){    if(strDest == NULL || strSrc == NULL)        return NULL;    if(strDest == strSrc)        return strDest;    char* tmp=strDest;    while((*strDest++=*strSrc++) != '\0')        return tmp;    return NULL;}/*4.C++是不是类型安全的?  C++不是类型安全的,两个不同类型的指针之间可以进行强制转换*//*5.描述内存分配的方式以及他们的区别?(1).从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运    行期间都存在。例如全局变量,static 变量。(2).在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行    结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。(3).从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的    内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,    使用非常灵活,但问题也最多。*//*6.说说const与#define相比的区别于联系?  const常量是有数据类型的,而宏变量是没有数据类型的;  编译器可以对const进行类型检查,而对后者仅仅是进行字符串的替换,可能会产生不可以预料的错误  有些集成化的调试工具可以对const常量进行调试 ,而对于#define类的宏常量不能进行替换。*/int main(){    ReverseLink rLink;    rLink.createLink();    rLink.OutPut();    rLink.MyReverse();    rLink.OutPut();    //7.打印出文件目录已经成本语句所在的行号    cout << __FILE__ << endl;    cout << __LINE__ << endl;    //8.打印出本文件是有那个编译器编译的    #ifdef __cplusplus    cout << "c++" << endl;    #else    cout << "C" << endl;    #endif // __cplusplus    return 0;}
2 0
原创粉丝点击