源码1 禁用拷贝构造函数 重载=运算符,以禁用=赋值 字符串拆分
2013-06-12 22:29
323 查看
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<dirent.h> #include<errno.h> #include<string> #include<iostream> #include<cstring> using namespace std; class sampleClass { public: sampleClass(int size); virtual ~sampleClass(); int getSize() {return mSize;} char* getBuffer() {return mpBuffer;} //public: private: // 禁用拷贝构造函数 sampleClass(const sampleClass& instance); // 重载=运算符,以禁用=赋值 sampleClass& operator=(const sampleClass& instance); private: int mSize; char* mpBuffer; }; sampleClass::sampleClass(int size) : mSize(size), mpBuffer(NULL) { if (size > 0) { mpBuffer = new char[size]; if (mpBuffer) memset(mpBuffer, 0, size); } cout<<__FUNCTION__<<","<<__LINE__<<endl; } sampleClass::~sampleClass() { if (mpBuffer) { delete mpBuffer; mpBuffer = NULL; } cout<<__FUNCTION__<<","<<__LINE__<<endl; } sampleClass::sampleClass(const sampleClass& instance) { cout<<__FUNCTION__<<","<<__LINE__<<endl; sampleClass* pInstance = const_cast<sampleClass*>(&instance); if (NULL == pInstance) return; mSize = pInstance->getSize(); if (mSize > 0) { mpBuffer = new char[mSize]; if (mpBuffer) memset(mpBuffer, 0, mSize); } } sampleClass& sampleClass::operator=(const sampleClass& instance) { cout<<__FUNCTION__<<","<<__LINE__<<endl; sampleClass* pInstance = const_cast<sampleClass*>(&instance); cout <<this<<"=?"<<pInstance<<endl; if (NULL != pInstance && this != pInstance) { mSize = pInstance->getSize(); if (mSize > 0) mpBuffer = new char[mSize]; if (mpBuffer) { memset(mpBuffer, 0, mSize); char* pBuff = pInstance->getBuffer(); if (pBuff) memcpy(mpBuffer, pBuff, mSize); } } return *this; } int main() { #if 1 sampleClass instance1(1); //sampleClass instance2(instance1); sampleClass instance3(3); //instance3 = instance1; #else // 字符串拆分示例 std::string source("0.513 0.618 0.324 0.465 -0.453 "); double a[5] = {0.0}; std::size_t pos = 0; std::string curStr; int cout = 0; do { pos = source.find_first_of(" "); if (string::npos == pos) break; curStr = source.substr(0, pos); a[cout++] = atof(curStr.c_str()); source = source.substr(pos+1, source.length() - curStr.length() - 1); } while (true); for (int i=0; i<cout; i++) { printf("%lf ", a[i]); } printf("\n"); #endif }
相关文章推荐
- 运算符的重载,赋值重载,下标重载、对带默认参数的构造函数、析构函数、拷贝构造函数、重载赋值的赋值
- 赋值和算术运算符的重载(1):赋值运算符 =
- 拷贝构造函数与重载赋值操作符的区别
- lua拆分字符串实现及lua源码查看
- 赋值和算术运算符的重载(2):算术运算符 +
- 如何禁用拷贝构造函数和禁用重载赋值运算符
- Java 深究字符串String类(1)之运算符"+"重载
- 第十八章 33用重载输出运算符函数实现字符串的输出
- 关于拷贝构造函数和重载成员运算符=
- 第十八章 34用重载输入运算符函数实现字符串的输入
- Visual Basic 2008 运算符(算术、关系、逻辑、字符串连接、赋值、移位)——汇总
- 字符串操作方法split(),拆分赋值
- 为需要动态分配内存的类声明一个拷贝构造函数与一个赋值运算运算符
- C++ 指针悬挂和赋值操作符的重载,拷贝构造函数实现
- (18)Powershell中的字符串拆分运算符
- 我的学习笔记——c++拷贝构造函数,重载赋值操作符
- 拷贝构造函数与重载赋值操作符
- 构造函数, 拷贝构造函数, 赋值操作重载各种情况实例演示
- C++学习笔记-----在重载的赋值运算函数中调用拷贝构造函数
- 实现string的默认构造函数,拷贝函数,c型字符串参数的构造函数,赋值构造函数,析构函数,重载输出操作符,测试