📄 类与继承.cpp
字号:
#include<iostream.h>
class BaseString
{
public:
char *GetData();
void Input();
void Disp();
BaseString();
virtual~BaseString();
unsigned int GetLength()
{return Length;}
protected:
char Data[1024];
unsigned int Length;//表示字符串的长度,包括结束的'\0'
};
BaseString::BaseString()
{
Length=0;
cout<<"This is basestring creating."<<endl;
}
BaseString::~BaseString()
{
cout<<"This is basestring dying."<<endl;
}
void BaseString::Disp() //在屏幕上输出字符串
{
if(Length<1)
{
cout<<"This is empty string!"<<endl;
}
else
{
cout<<"Display the string!"<<Data;
cout<<endl;
cout<<"The length of this string is:"<<Length<<endl;
return;
}
}
void BaseString::Input() //从键盘上输入字符串
{
cout<<"Please input a string of character:";
char temp;
cin.unsetf(ios::skipws); //忽略字符串中的空格
for(int i=0;i<1024;i++)
{
cin>>temp;
Data[i]=temp;
if(temp=='\n') //读入字符,直至行尾
{
Data[i]=0;
Length=i+1;
break;
}
}
cout<<"\nInput string length is:"<<Length<<endl;
return;
}
char *BaseString::GetData()
{
return Data;
}
class CmpString:virtual public BaseString
{ //这里是虚基类,为了在NewString类的继承中没有二义性
public:
bool Compare(char *psz);
CmpString();
virtual~CmpString();
};
CmpString::CmpString()
{
cout<<"This is compare string creating."<<endl;
}
CmpString::~CmpString()
{
cout<<"This is compare string dying."<<endl;
}
bool CmpString::Compare(char *psz)
{
int newlength=0;
char*p=psz;
do
{
p++;
newlength++;
}
while(*p!=(int)Length);
return false;
p=psz;
for(int i=0;i<(int)Length;i++)
{
if(Data[i]==*p)
{
p++;
}
else
{
return false;
}
}
return true;
}
class CopyString:virtual public BaseString
{
public:
void Copy(char*psz);
CopyString();
virtual~CopyString();
};
CopyString::CopyString()
{
cout<<"This is the copystring creating."<<endl;
}
CopyString::~CopyString()
{
cout<<"This is the copystring dying."<<endl;
}
void CopyString::Copy(char*psz)
{
char*p=psz;
int NewStringLength=0;
while(*p!='0')
{
p++;
NewStringLength++;
}
if(NewStringLength<1024)
{
p=psz;
for(int i=0;i<NewStringLength;i++)
{
Data[i]=*p;
p++;
}
Data[i]='\0';
Length=NewStringLength+1;
}
else
{
return ;
}
}
class ReString:virtual public BaseString
{
public:
void Reverse();
ReString();
virtual~ReString();
};
ReString::ReString()
{
cout<<"This is re string creating"<<endl;
}
ReString::~ReString()
{
cout<<"This is re string dying"<<endl;
}
void ReString::Reverse()
{
if(Length==0)
{
cout<<"The string is empty,please input a new string."<<endl;
return;
}
char temp;
for(int i=0;i<(int)Length/2;i++)
{
temp=Data[i];
Data[i]=Data[Length-2-i];
Data[Length-2-i]=temp;
}
}
class NewString:public CmpString,public CopyString,public ReString
{
public:
NewString();
virtual ~NewString();
};
NewString::NewString()
{
}
NewString::~NewString()
{
}
void main()
{
NewString s;
s.Input();
s.Disp();
s.Reverse();
s.Disp();
s.Copy("longer");
s.Disp();
if(s.Compare("longer"))
cout<<"equal"<<endl;
else
cout<<"different"<<endl;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -