zoukankan      html  css  js  c++  java
  • C++知识点

    基础知识:c++的基础知识:面向对象的特性、构造函数、析构函数、动态绑定等,还有常见的设计模式、UML图

    C++知识点:sizeof

     

     

    C++知识点:复制构造函数,

     

    C++推荐书目

    Effective c++ 适合在面试之前突击c++,该书提到的问题也是面试官喜欢问的问题。

    C++ primer 全面了解c++

    Inside c++ Object model 没入了解c++对象的内部。可以解决c++的很多难题。

    The C++ Programming Language 全面深入掌握c++。

    C++赋值运算符函数

    关注点:

    1)        返回值类型为该类型的引用,这样才可以连续赋值

    2)        传入的参数的类型声明为常量引用,若不是引用则会从形参到实参调用一次复制构造函数。

    3)        如果实例自身有堆区的内存,不要忘记释放原有的内存,并且在c++中我们习惯的做法是:同类型每个实例内部的堆区内存相互独立,即地址不相同,所以不要忘记在分配新内存之前释放自身的空间

    4)        要记得判断传入的参数和当前的实例(*this)是不是同一个实例即地址是否相同,如果相同则什么样不做,不同则继续进行复制,这个判断在实例自身有堆区的内存时是必不可少的,因为如果当前实例和传入的实例是同一个实例,同时该实例又有堆区的内存,如果不加判断就释放堆区内存,那么删除之后传入的那个实例的堆区内存也删除了,就没有办法赋值了。

    #include <iostream>
    #include <string.h>
    //#include <bad_alloc.h>
    class CMyString{
        public:
            CMyString(char * pData = NULL);
            CMyString(const CMyString & );
            CMyString & operator=(const CMyString & );
            ~CMyString();
        private:
            char * m_pData;
    }; 
    CMyString::CMyString(char * pData)
    {
        m_pData = NULL;
        m_pData = new char[strlen(pData) + 1];
        //if(!m_pData)throw bad_alloc;//这里还不知道如何使用 
        strcpy(m_pData,pData);
    }
    CMyString::CMyString(const CMyString & str)
    {
        CMyString(str.m_pData);//不知道怎么样; 
        /*
        m_pData = NULL;
        m_pData = new char[strlen(str.m_pData) + 1];
        //if(!m_pData)throw bad_alloc;//这里还不知道如何使用 
        strcpy(m_pData,pData);
        */
    }
    /*版本一*/
    //CMyString & CMyString::operator=(const CMyString & str)
    //{
    //    if(this == &str)
    //        return * this;
    //    delete [] m_pData;
    //    m_pData = NULL;
    //    m_pData = new char[strlen(str.m_pData)+1];
    //    strcpy(m_pData,str.m_pData);
    //    return * this;
    //}
     
    /*版本二*/ 
    CMyString & CMyString::operator=(const CMyString & str)
    {
        if(this == &str)
            return * this;
        CMyString strTmp(str);//调用复制构造函数;这里面实现的其实是new的功能 ,同时也处理异常情况; 
        char * chTmp = strTmp.m_pData;
        strTmp.m_pData = m_pData;//这样可以利用局部对象strTmp的析构函数来删除本对象的原来的栈区; 
        m_pData = chTmp;
        
        return * this;
        
    }
    CMyString::~CMyString()
    {
        
    }
    int main()
    {
        return 0;
    }
  • 相关阅读:
    Study Plan The Twelfth Day
    Study Plan The Fifteenth Day
    Study Plan The Seventeenth Day
    Study Plan The Tenth Day
    Study Plan The Eighth Day
    Study Plan The Eleventh Day
    Study Plan The Sixteenth Day
    Study Plan The Thirteenth Day
    Study Plan The Fourteenth Day
    Study Plan The Ninth Day
  • 原文地址:https://www.cnblogs.com/dragonfive/p/4334113.html
Copyright © 2011-2022 走看看