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;
    }
  • 相关阅读:
    《JavaScript和jQuery实战手册(原书第2版)》——2.1节语句
    《JavaScript和jQuery实战手册(原书第2版)》——2.1节语句
    Jenkins ant打包部署
    Jenkins ant打包部署
    Jenkins ant打包部署
    Jenkins ant打包部署
    外媒解读Web安全核心PKI的四大致命问题
    外媒解读Web安全核心PKI的四大致命问题
    “浪子”觉醒,通过养羊创业致富
    在互联网时代,餐饮业将如何突破?
  • 原文地址:https://www.cnblogs.com/dragonfive/p/4334113.html
Copyright © 2011-2022 走看看