一、题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
public class CMyString {
private char m_pData[];
public CMyString(char pData[]) { //输入的是字符型
m_pData = pData;
}
public CMyString(CMyString str) { //输入的是CMyString类的对象
m_pData = str.m_pData;
}
}
二、分析
1、函数的返回类型必须是一个引用,因为只有返回引用,才可以连续赋值;
2、注意传入的参数和当前的实例是不是同一个实例,如果是同一个,则不用进行赋值操作,直接返回即可。
三、完整代码
public class CMyString {
private char m_pData[];
public CMyString(char pData[]) { //输入的是字符型
m_pData = pData;
}
public CMyString(CMyString str) { //输入的是CMyString类的对象
m_pData = str.m_pData;
}
public CMyString dengyu(CMyString str) {//赋值运算符函数
if (this == str)
return this;
//自我赋值----------是为了判断传入的参数str与当前实例是否为同一实例。若是,则不再进行赋值操作,直接返回this即可。
this.m_pData = null; //将指针初始化为空
m_pData = new char[str.m_pData.length]; //设定数组大小为传入的实例str的长度
for (int i = 0; i < str.m_pData.length; i++) { //将每一个字符的数据赋给对应位置
m_pData[i] = str.m_pData[i];
}
return this; //返回当前实例this 确保返回一个引用
}
public String toString() { //重写toString()
StringBuilder result = new StringBuilder("字符串的结果是:");
for (int i = 0; i < m_pData.length; ++i)
result.append(m_pData[i]);
return result.toString();
}
public static void main(String[] args) { //主函数
String s = "Change before"; //定义两个字符串
String s1 = "Change after";
CMyString cms = new CMyString(s.toCharArray());
CMyString cms1 = new CMyString(s1.toCharArray());
System.out.println(cms.toString());
cms.dengyu(cms1);
System.out.println(cms.toString());
}
}