实现C++类中默认的四个方法默认构造函数、析构函数、拷贝构造函数、赋值函数
2014-09-03 16:43
369 查看
1、BaceClass.h
2、 BaseClass.cpp
3、测试代码 main.cpp
#ifndef _BASECLASS_H_ #define _BASECLASS_H_ #include <iostream> using namespace std; #define NUMBER 100 class Base { public: Base(); //默认构造函数 Base(const char *data); //override构造函数 Base(const Base & base); //拷贝构造函数 Base& operator=(const Base &base); //赋值函数 Base* operator&(); //取地址运算符 //const Base* operator&(); //const类型取地址运算符 ~Base(); //析构函数 private: char * m_data; }; #endif _BASECLASS_H_
2、 BaseClass.cpp
#include "BaseClass.h" /*默认无参构造函数实现*/ Base::Base() { if (m_data == NULL) { m_data = new char[1]; *m_data = '\0'; } cout<<"construct function."<<endl; } /*默认构造函数实现*/ Base::Base(const char *data) { _ASSERT(NULL != data); m_data = NULL; m_data = new char[strlen(data) + 1]; if (NULL == m_data) { _ASSERT(0); } memset(m_data, NULL, sizeof(m_data)); memcpy(m_data, data, strlen(data)); m_data[strlen(data)] = '\0'; cout<<"copy construct function::"<<m_data<<endl; } /*默认拷贝构造函数实现*/ Base::Base(const Base &base) { m_data = new char[strlen(base.m_data) + 1]; if (NULL == m_data) { _ASSERT(0); } memset(m_data, NULL, sizeof(m_data)); memcpy(m_data, base.m_data, strlen(base.m_data)); m_data[strlen(base.m_data)] = '\0'; cout<<"voluation construct function::"<<m_data<<endl; } /*默认重载'='赋值操作符函数实现*/ Base & Base::operator=(const Base &base) { _ASSERT(NULL != base.m_data); if (this == &base) { return *this; } delete []m_data; //这儿只将内容删除掉,字符串指针保留 m_data = new char[strlen(base.m_data) + 1]; if (NULL == m_data) { _ASSERT(0); } memset(m_data, NULL, sizeof(m_data)); memcpy(m_data, base.m_data, strlen(base.m_data)); m_data[strlen(base.m_data)] = '\0'; cout<<"Copy assignment operator construct function::"<<m_data<<endl; return *this; } /*默认析构函数实现*/ Base::~Base() { cout<<"destructor function."<<endl; delete []m_data; m_data = NULL; }
3、测试代码 main.cpp
#include "BaseClass.h" int main() { //Base base("hello world!"); Base base = Base("hello world!"); Base copybase(base); //此处调用的是默认拷贝构造函数,因为是在定义的时候赋值,所以来不及调用'='赋值操作符 //与后面的操作是等价的:Base copybase=base; 或 Base copybase = Base(base); Base copy2base; copy2base=base; //已经初始化完成,调用的是'='赋值操作符 copy2base.~Base(); copybase.~Base(); base.~Base(); return 0; }
相关文章推荐
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- C++(1)C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- 字符串strcpy函数的实现,以及字符串string的实现,编写构造函数,拷贝构造函数,赋值函数,析构函数
- C++类构造函数,拷贝构造函数,赋值函数,析构函数几点注意
- 类String的 构造函数、拷贝构造函数、析构函数、赋值函数实现
- 自主编程实现String类的构造函数,析构函数,拷贝构造函数,赋值函数
- 实现MyString类--构造函数、拷贝构造函数、析构函数、赋值函数、操作符重载函数
- C++实现一个类并包含构造函数,拷贝构造函数,赋值函数,析构函数
- 编写String类的普通构造函数、拷贝构造函数、析构函数、赋值函数
- 编写类String的构造函数、拷贝构造函数、析构函数、赋值函数
- 实现字符串类String的设计,实现赋值运算符重载函数,默认、一般、拷贝构造函数,析构函数