C++默认编写并调用的函数

本文详细介绍了C++中构造函数与复制构造函数的基本概念,并通过具体实例演示了String类的实现过程,包括初始化、析构、复制构造及赋值操作等关键环节。

     题外话:虽然这是基本知识,但是某次面试一紧张,竟然返回值写错了,强烈鄙视自己。。。 温故而知新,做个记号。

    如果自己没有声明,编译器也会默认创建下列4个函数。且这些函数都是public和inline的。

    代码如下:

class CEmpty
{
public:
    CEmpty(void){...}
    ~CEmpty(void){...}
    CEmpty( const CEmpty& rhs ){...}
    CEmpty& operator=( const CEmpty& rhs ){...}
};

练习一个String的实现:

类String原型为:

class String
{
public:
    String( const char *str = NULL );
    ~String()(void);
    String( const String& rhs );
    String& operator=( const String& rhs );
private:
    char* m_data;
}

实现:

//#include<string.h>

inline String::String( const char* str )
{
    if( str == NULL ) {
         m_data = new char[1];
         *m_data = '/0';
    }
    else {
         m_data = new char[strlen(str)+1];
         strcpy( m_data, str );
    }
}

inline String::~String( void )
{
     delete []m_data;
}

inline
String::String( const String& rhs )
{
     m_data = new char[strlen(rhs.m_data)+1];
     strcpy( m_data, rhs.m_data );
}

inline  String&
String::operator=( const String& rhs )
{
    if(this == &rhs)
         return *this;
    delete []m_data;
    m_data = new char[strlen(rhs.m_data)+1];
    strcpy(m_data, rhs.m_data);
    return *this; 
}

 

p.s. 把代码拷到vs.net里面,编译不通过。报错:“error C2533:"String::__ctor":构造函数不能有返回类型”,看了半天没看出问题。。。后来发现是class定义后面忘记加“;”了,狂汗#_#!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值