CPlusPlus容易忽略的概念

#include <iostream>
#include <cstring>
using namespace std;

class mString
{
public:
    mString(const char * buf)//有参构造函数
        :m_buf(strcpy(new char[strlen(buf) + 1 ],buf) )
    {
    }
    mString(const mString& that)//拷贝构造函数
        :m_buf(strcpy(new char[strlen(that.m_buf)+1],that.m_buf) )
    {
        
    }
    virtual ~mString()
    {
        if(m_buf)
        {
            delete m_buf;
        }
    }

    const mString& operator=(const mString& that)//拷贝赋值
    {
        if(&that != this)
        {
            if(m_buf) delete[] m_buf;
            m_buf = strcpy(new char[strlen(that.m_buf)+1],that.m_buf);
        }
        return *this;
    }

    const mString& operator=(const char * buf)//拷贝赋值
    {
        delete[] m_buf;
        m_buf = new char[strlen(buf)+1];
        return *this;
    }

    friend const mString operator+(const mString& left,const mString& right)//重载+(友元函数 非成员函数版本)
    {
        char * tbuf = new char[ strlen(left.m_buf)+strlen(right.m_buf)+1 ];
        mString tt(strcat(strcpy(tbuf,left.m_buf),right.m_buf) ) ;//调用有参构造
        delete[] tbuf;
        return tt;
    }

    const char* mc_str()const
    {
        return m_buf;
    }

    void print()const
    {
        cout<<mc_str()<<endl;
    }

private:
    char * m_buf;
};

int main()
{
    mString str1("aaaa");//有参构造
    str1.print();
    cout<<"----------"<<endl;

    mString str2="bbbb";//拷贝赋值
    str2.print();
    cout<<"----------"<<endl;

    
    mString str3= str1+str2;//重载+
    str3.print();
    cout<<"----------"<<endl;

    mString str4(str3);//拷贝构造
    str4.print();
    cout<<"----------"<<endl;

    const char* (mString::*pfn)()const = &mString::mc_str;//常函数也要加上标识
    cout<<(str1.*pfn)()<<endl;
    cout<<"----------"<<endl;

    void (mString::*pfn2)()const = &mString::print;
    mString *pStr =&str2;
    (pStr->*pfn2)();
    
    getchar();
    
    return 0;
}
时间: 2024-08-07 06:36:49

CPlusPlus容易忽略的概念的相关文章

C++中的指针和数组

最近看C++编程思想,看到第十三章动态内存管理的时候把自己给绕进去了,主要是在数据和指针这块弄混了.现在把找到的一些资料总结如下: 1. 数组是数组,指针是指针,两者并不等价: 2.数组在作为左值的时候一般是数组自己,而放在右值往往被转换成一个常量指针: 3.下标运算符其实是针对指针的,只是数组变成指针后也适用于了数组: 4.对数组取地址符在很早以前是错误的,因为数组名本身就是数组的地址,对地址去地址显然不对,后来被C++标准定为合法的,表示指向数组对象的指针. 对于 int a[100]; i

[歪谈]物质激励如果不管用了,不妨试一试精神管理

[申明]本文是“歪谈”风格,仅用于和大家探讨观点,提高大家的思维性.错误之处在所难免,欢迎大家的批评指正. 今天我们简单探讨一个话题:团队的精神管理. 前几天和一些创业者在一起聚会,大家讨论的话题无外乎生意难做.钱难收.创新难.用户口味太难捉摸外,不过类似这些问题似乎都比较容易找到答案或者你和我互相借鉴的方案.譬如: 1.A创业者说钱难收,B创业者说正好认识该客户,他去说道说道,A创业者当即表示只要把尾款结了立马给B创业者提成. B创业者捂着嘴说:不要.不要,太客气了. 接着又问:提成多少捏?!

xpath的学习

xpath的学习 xpath的作用就是两个字“定位”,运用各种方法进行快速准确的定位,推荐两个非常有用的的firefox工具:firebug和xpath checker 定位 1.依靠自己属性,文本定位 //td[text()='xxx'] //div[contains(@class,'xxx')] //div[@class='xxx' and @type='xxx'] 2.依靠父节点定位 //div[@class='xxx']/div //div[@id='xxx']/div 3.依靠子节点定

检查数据倾斜分布

从传统数据库迁移到GP中一个重要的且常常被开发者忽略的概念是数据分布,没有良好的设计表的分布键会导致严重的性能问题.下面函数将给开发者及DBA检測一个表的数据倾斜情况. -- Function: gpmg.data_skew(character varying) -- DROP FUNCTION gpmg.data_skew(character varying); CREATE OR REPLACE FUNCTION gpmg.data_skew(tablename character vary

移动构造函数和移动赋值

一.概述 移动构造函数可以弥补拷贝构造函数的空缺. 移动语义,简单来说解决的是各种情形下对象的资源所有权转移的问题.而在C++11之前,移动语义的缺失是C++饱受诟病的问题之一. 举个栗子. 问题一:如何将大象放入冰箱?答案是众所周知的.首先你需要有一台特殊的冰箱,这台冰箱是为了装下大象而制造的.你打开冰箱门,将大象放入冰箱,然后关上冰箱门. 问题二:如何将大象从一台冰箱转移到另一台冰箱?普通解答:打开冰箱门,取出大象,关上冰箱门,打开另一台冰箱门,放进大象,关上冰箱门.2B解答:在第二个冰箱中

Selenium - Xpath 使用方法

由于最新版火狐不在支持FireBug等开发工具,可以通过https://ftp.mozilla.org/pub/firefox/releases/下载49版本以下的火狐就可以增加Firebug等扩展了. 什么是Xpath? XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素. 工具 Xpath可以下载火狐浏览器插件FireBug 用法: 1. /(绝对路径,从根节点选取) 2. //(相对路径,所有子代节点,不用考虑是否直接子节点) 3. @ 选取属性 4. ".&q

[转载]oracle游标概念讲解

原文URL:http://www.2cto.com/database/201203/122387.html ORACLE游标概念讲解 什么是游标?  ①从表中检索出结果集,从中每次指向一条记录进行交互的机制.      ②关系数据库中的操作是在完整的行集合上执行的.   由SELECT 语句返回的行集合包括满足该语句的WHERE 子句所列条件的所有行.由该语句返回完整的行集合叫做结果集.      应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的.      这些

LINUX 信号概念详解

LINUX 信号概念详解 我们运行如下命令,可看到Linux支持的信号列表: # kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP

2017.06.29数据挖掘基础概念第二.三章

第二章21.研究的属性类型标称属性:值是一些符号或事物的名称,代表某种类型.编码或状态二元属性:是一种标称属性,只有两个类别或状态,又称布尔属性序数属性:是一种属性,其可能的值之间具有有意义的序或秩评定,但是相续值之间的差是未知的数值属性:是定量的,即他是可度量的量,可用整数或实数值表示(区间和比率标度)22.数据散布常见的度量量(数据如何分散的方法/识别离群点)极差 四分位数.四分位数极差.五数概括图.方差和标准差23.审视数据的图形条形.饼图.线图.分位数图.分位数-分位数图.直方图和散点图