通过EditString的构造函数初始化基类String的构造函数时,私有成员len值总为0?
基类String派生出EditString类,但是通过EditString的构造函数初始化基类String的构造函数时,String类的私有成员len值总为0?
请各位友友提出详细点的解决办法,^_^
#include<iostream>
#include<cstdlib>
using namespace std;
class String
{
public:
String();
String(char* s);
~String();
int Getlen()const { return len; }
void SetString(char* ss); // 设置字符串
void Setlen(const int l) { len=l;}
void Show() { cout<<"输出字符串指针str所指向的内容:"<<str<<endl; }
public:
char *str;
private:
int len;
};
class EditString:public String
{
public:
EditString();
EditString( char* es );
~EditString();
void SetCursor( int s); // 光标定位函数
};
String::String()
{
len=0;
str=new char[1];
str[0]='\0';
cout<<"基类String被默认构造."<<endl;
}
String::String(char *s)
{
len=strlen(s);
str=new char[len+1];
for(int i=0;i<len;i++)
*(str+i)=*(s+i);
*(str+len)='\0';
cout<<"基类String被构造."<<endl;
}
String::~String()
{
delete[] str;
cout<<"基类被析构!"<<endl;
}
void String::SetString(char* ss)
{
delete[] str;
len=strlen(ss);
str=new char[len+1];
for(int i=0;i<len;i++)
*(str+i)=*(ss+i);
*(str+len)='\0';
}
EditString::EditString()
{
String::String();
cout<<"EditString类默认构造."<<endl;
}
EditString::EditString(char *es) // EditString构造函数
{
String::String(es); // 就是这里,为什么在传递指针给基类string时候,在string的构造函数中,字符串长度总是为0 ? 谁帮忙解决一下这个问题
cout<<"初始化字符长度为:"<<String::Getlen()<<endl;
cout<<"EditString类被构造."<<endl;
}
EditString::~EditString()
{
cout<<"EditString类被析构."<<endl;
}
void EditString::SetCursor( int s) // 实现光标"|"的定位功能
{
int i=0;
char *temp=new char[String::Getlen()+2]; // 新建一个指向字符型指针temp并将其初始化
for(;i<s;i++) // 以下两个for循环目的是插入字符"|",从而借此实现光标的定位
*(temp+i)=*(String::str+i);
*(temp+s)='|';
for(;i<String::Getlen()+1;i++)
*(temp+i+1)=*(String::str+i); ??? 这里可以这样实现把str所指向内容的值传过来吗?
*(temp+String::Getlen()+1)='\0';
cout<<"现在字符串为:"<<temp<<endl;
delete[] temp; // 释放指针temp所指向的内存空间
}
int main()
{
EditString ES("How are you.");
ES.SetCursor(6);
return 0;
}