// 提示strcpy安全问题,解决方法
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdint.h>
using namespace std;
class MyClass
{
public:
MyClass();
~MyClass();
void foo(){cout << "A" << endl;}
private:
};
MyClass::MyClass()
{
}
inline MyClass::~MyClass()// 析构函数可以是内联函数
{
cout << "inline destructed." << endl;
}
class StringT
{
public:
StringT(const char *str = NULL); // 普通构造函数
StringT(const StringT &other); // 拷贝构造函数
StringT & operator=(const StringT &other); // 赋值函数
void Print(const StringT &other) const; // const成员函数
~StringT(void); // 析构函数
private:
char *m_pdata;
};
StringT::~StringT(void)
{
delete m_pdata;
}
void StringT::Print(const StringT &other) const
{
int len = strlen(other.m_pdata);
char *p = other.m_pdata;
for (int i = 0; i < len; i++)
{
cout << *(p++);
}
cout << endl;
}
StringT::StringT(const char *str)
{
if (str == NULL)
{
m_pdata = new char[1];
*m_pdata = '\0';
}
else
{
int length = strlen(str);
m_pdata = new char[length + 1];
strcpy(m_pdata,str);
}
}
StringT::StringT(const StringT & other)
{
if (other.m_pdata == NULL)
{
m_pdata = new char[1];
*m_pdata = '\0';
}
else
{
int length = strlen(other.m_pdata);
m_pdata = new char[length + 1];
strcpy(m_pdata,other.m_pdata);
}
}
//赋值函数实现方法①
StringT& StringT::operator =(const StringT &other)
{
// 1检测是否自身赋值
if (this == &other)
{
return *this;
}
// 2释放原有内存资源
delete m_pdata;
// 3重新分配内存资源,并赋值other中内容
int length = strlen(other.m_pdata);
m_pdata = new char[length + 1];
strcpy(m_pdata, other.m_pdata);
return *this;
}
//赋值函数实现方法② 源自剑指offer面试例题1
//StringT& StringT::operator =(const StringT &other)
//{
// if (this != &other)
// {
// StringT strTmp(other);
// char *pTmp = strTmp.m_pdata;
// strTmp.m_pdata = m_pdata;
// m_pdata = pTmp;
// }
// return *this;
//}
int main()
{
MyClass *P = new MyClass();
P->foo();
delete P;
StringT str("hello");
StringT s(str);
StringT t = s;
cout << "str = ";
str.Print(str);
cout << "s = ";
s.Print(s);
cout << "t = ";
t.Print(t);
return 0;
}
类的构造函数,析构函数,赋值函数
原创
©著作权归作者所有:来自51CTO博客作者Digital2Slave的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:VIM--矩阵转置运算
下一篇:分层遍历二叉树
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
类的构造函数、析构函数与赋值函数(一)
每一个类只有一个
c++ 类 构造函数 析构函数 赋值函数 -
类构造函数&析构函数
类的构造函数类的构造函数是类的一种特殊的成员函数,它会在每次创建性的对象时执行 构造函数
类的构造函数 类的析构函数 Line 构造函数 析构函数 -
类/对象/构造函数/析构函数
讲些类,对象,构造函数,析构函数的基本概念
class 休闲 object construct desconstruct -
类的构造函数、析构函数与赋值函数(二)构造函数的初始化表
构造函数有个特殊的初始化方式叫“
c++ 类 构造函数 初始化表 初始化 -
构造函数和析构函数
构造函数和析构函数
编译器 构造函数 析构函数 拷贝构造函数 无参构造函数 -
python input 输不了中文
我们在C语言中会使用数组来将一大堆数据类型一样的数据挨个摆在一起,但是数组有一个基本的要求,就是数据类型必须是一致的,我们知道Python的变量由于没有数据类型,也就是说Python没有数组这一概念,但是Python引入了更为强大的列表。 基本概念 列表(list)是Python中内置可变序列,是
python input 输不了中文 Python 教学学习 Python 数据 字符串