码迷,mamicode.com
首页 > 编程语言 > 详细

C++知识点

时间:2015-03-13 01:35:21      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

基础知识: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;
}

 

C++知识点

标签:

原文地址:http://www.cnblogs.com/dragonfive/p/4334113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!