
#include<亏谈iostream>
using
namespace
std
class
A
{
int
*i
static
int
a,b,c
static
int
count
public:
A(int
x,int
y,int
z)
{
a=x
b=y
c=z
i=new
int[b]
}
static
int
getCount()
{
count++
return
count
}
~A()
{
cout<<"旅汪析构函数"
}
}
int
A::count=0
int
A::a=0
//不是说不能定义为static变量,但销镇碰要在这里初始化
int
A::b=0
int
A::c=0
void
main()
{
int
a,b,c
cin>>a>>b>>c
A
*d=new
A(a,b,c)
cout<<d->getCount()
cout<<d->getCount()
cout<<d->getCount()
delete
d
//d是个指针,没有delete掉那个对象的内存,因此没调用析构函数,加个delete手动析构
}
class CString{
private:
char * m_pbuff //指向字符串的指针
int m_length//表示当前字符串的最大允许长度,也就是字符数组的长度
public:
~CString()//析构
CString() //构造函数1,设置为空字符串,m_length=100
CString(CString &) //拷贝构造
CString(char *src) //构造函数2,在考虑了src的长度后初始化当前对象,m_length>=src的长度+1
CString(char ch) //构造函数3,0号元素赋斗橡值为ch,m_length=100
int SetString(char *src) //设置字符串,在考虑了src的长度后设置当前对象,m_length>=src的长度+1
void trim()// 去除字符串最前和最后的空格
int find(char ch) //查找字符串中的指定字符的第一次出现位置,如果未出现返回-1
void toLower()//字符串转小芹闹写
void toUpper()//字符串转大写
void deletechar(char ch) // 删除其中的指定字符
void show()
private:
void freeBuff()
}
void CString::freeBuff()
{
if(m_pbuff != 0)
{
delete []m_pbuff
m_pbuff = 0
}
}
CString::CString()
{
m_pbuff = new char[100]
m_length = 100
m_pbuff[0] = 0
}
CString::CString(CString &ref)
{
if(ref.m_length > 0)
{
m_length = ref.m_length
m_pbuff = new char[m_length]
memcpy(m_pbuff,ref.m_pbuff,m_length)
}
else
{
m_pbuff = 0
m_length = 0
}
}
CString::CString(char *src)
{
m_length = src?strlen(src)+1:0
if(m_length == 0)
m_pbuff = 0
else
{
m_pbuff = new char[m_length]
memcpy(m_pbuff,src,m_length)
}
}
CString::CString(char ch)
{
m_length = 100
m_pbuff = new char[m_length]
m_pbuff[0] = ch
m_pbuff[1] = 0
}
int CString::SetString(char *src)
{
freeBuff()
m_length = src?strlen(src)+1:0
if(m_length == 0)
m_pbuff = 0
else
{
m_pbuff = new char[m_length]
memcpy(m_pbuff,src,m_length)
}
}
void CString::trim()
{
int i,j=m_length
for(i=0i<m_length++i)
{
if(m_pbuff[i] != ' ' || m_pbuff[i] == 0)
break
}
//跳过\0字符后面的所有字符
while(m_pbuff[--j] != 0)
while(j>0 && m_pbuff[j-1] == ' ')
嫌销罩 --j
m_pbuff[j] = 0
m_length = j-i
if(m_length == 0)
freeBuff()
else
{
m_length += 1
char *p = new char[m_length]
memcpy(p,m_pbuff+i,m_length)
freeBuff()
m_pbuff = p
}
}
int CString::find(char ch)
{
for(int i=0i<m_length++i)
{
if(m_pbuff[i] == 0)
return -1
if(m_pbuff[i] == ch)
return i
}
return -1
}
void CString::toLower()
{
for(int i=0i<m_length && m_pbuff[i] != 0++i)
{
if(m_pbuff[i] >= 'A' && m_pbuff[i] <= 'Z')
m_pbuff += 32
}
}
void CString::toUpper()
{
for(int i=0i<m_length && m_pbuff[i] != 0++i)
{
if(m_pbuff[i] >= 'a' && m_pbuff[i] <= 'z')
m_pbuff -= 32
}
}
void CString::deletechar(char ch)
{
if(m_length == 0)
return
char *p = new char[m_length]
for(int i=0,j=0i<m_length && m_pbuff[i] != 0++i)
{
if(m_pbuff[i] != ch)
p[j++] = m_pbuff[i]
}
p[j] = 0
freeBuff()
m_pbuff = p
}
void CString::show()
{
if(m_length > 0 && m_pbuff[0] != 0)
printf(m_pbuff)
}
以上代码均为NOTEPAD++手敲,请自行测试。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)