设计String类
//C++ 设计String类:构造函数,拷贝构造函数,析构函数,赋值函数
#include
using namespace std;
class String
{
public:
String(const char *str=NULL);
String(const String&another);
~String();
String&operator=(cons...
分类:
编程语言 时间:
2014-07-26 02:59:16
阅读次数:
383
noncopyable大家都知道定义一个空类的时候,它实际包含了构造函数,拷贝构造函数,赋值操作符和析构函数等。这样就很容易产生一个问题,就是当用户调用Aa(“^_^")或者Ac="^_^" 时会发生一些意想不到的行为,所以很多时候我们需要禁用这样的用法。一种方法就是把拷贝构造函数和赋值操作符显式的...
分类:
编程语言 时间:
2014-07-24 04:58:18
阅读次数:
300
避免含糊转换
参数匹配和相互转换
struct B;
struct A
{
A()=default;
A(const B&) //吧B负责给A,拷贝构造函数
{//嘿,这里我有点明白了,只要 后面调用了这个函数,那么这个函数就得有定义
//不能只声明不定义
cout<<"调用了A(const B&)转换!"<<endl;
}...
分类:
编程语言 时间:
2014-07-22 14:43:26
阅读次数:
297
1、char数组转string有很多种方法:假设c字符串定义为char ch[]="hello world!";1.向构造函数传入c字符串创建string对象:string str(ch);2.使用拷贝构造函数创建string对象:string str = ch;3.对已有的string对象调用st...
分类:
其他好文 时间:
2014-07-21 14:39:47
阅读次数:
226
上篇文章中,我们介绍了为什么应该彻底避免编写拷贝构造函数和赋值操作符。今天这篇我们讨论下为什么应该避免在析构函数中编写代码。即让析构函数为空。
例如:
virtual ~MyClass()
{
}
我们用空析构函数这个术语表示花括号内没有代码的析构函数。
需要编写析构函数可能有如下几个原因:
在基类中,可能需要声明虚拟析构函数,这样就可以使用一个指向基类的指针指向一个派生类的实例...
分类:
其他好文 时间:
2014-07-21 13:33:46
阅读次数:
188
C++ 复制函数
说道C++复制函数,大家也许并不陌生,就是类中的拷贝构造函数和赋值操作符,但是事实上也许我们一不小心就会忽略编译器所做的一些默认操作。引起晦涩的错误。下面分析几种场景:
一、场景一:全部默认
#include
class base{
public:
base(){}
base(int dt):data(dt){}
void get(){pri...
分类:
编程语言 时间:
2014-07-20 22:45:53
阅读次数:
341
假设有一个如下的MyClass类:
class MyClass
{
public:
//构造函数
//拷贝构造函数
MyClass(const MyClass& that)
: int_data_(that.int_data_),
dbl_data_(that.dbl_data_),
str_data_(that.str_data_)
{
}
//赋值操作符
M...
分类:
其他好文 时间:
2014-07-19 23:46:08
阅读次数:
350
0.两个要点a) 一个空类,编译器自动合成默认无参构造函数、析构函数、拷贝构造函数、赋值运算符。b) 在编写类的时候,必须严格区分对象是否可复制。1.运算符重载之 string类1.1 运算符重载的几个要点:a) 运算符重载可以有成员函数和友元函数的形式,后者比前者多一个参数。b) =和+=必须重载...
分类:
编程语言 时间:
2014-07-19 18:30:05
阅读次数:
206
1.默认拷贝构造函数 1.1 编译器自动为我们合成一个拷贝构造函数。A(const A &). 1.2 对象复制的时机: a) 显式复制。 b) 使用对象做形参 c) 使用对象做返回值 d) 往容器中放入对象 #include #include #include using na...
分类:
编程语言 时间:
2014-07-18 15:32:55
阅读次数:
312
在
C++ 中,赋值和拷贝是不同的,
1)拷贝构造函数是对未初始化的内存进行初始化操作
2)而赋值是对现有的已经初始化的对象进行操作。(这里我对“已经初始化”的理解是已经调用了构造函数,并且构造函数体可以未执行,只要调用到即可),赋值函数应该给所有数据成员都初始化。
3)重点:包含动态分配成员的类
应提供拷贝构造函数,并重载"="赋值操作符。...
分类:
其他好文 时间:
2014-07-16 13:42:16
阅读次数:
186