1
一、封装
1. 对于设计好的 MyString 类(封装了一个字符指针 m_pbuf,无虚函数),回答下面的问题:
(1)以下程序段会调用哪些函数?对象 str1 占用多少字节的内存空间?str2 呢?
{
MyString str1, str2("I love C++!");
MyString str3(str2), str4 = str2;
str1 = str2;
}
(2)该类的复制构造函数和赋值运算符函数应如何实现?
(3)对于我们设计好的 MyString 类,以下程序段能够运行,则 MyString 类一定有什么
样的构造函数?运行该程序会调用哪些函数?
{
MyString * p = new MyString[10];
delete [] p;
}
(4)对于我们设计好的 MyString 类,以下程序段能够运行,则运行该程序会调用哪些函
数?
MyString & fun1(MyString & s)
{ s.append("I score 100."); return s; }
MyString fun2(MyString s) { s.append("I score 100"); return s; }
int main()
{
MyString s("I love C++. ");
fun1(s);
cout << s << endl;
fun2(s);
cout << s << endl;
return 0;
}
(5)假设为 MyString 类设计了如下两个完成字符串的追加功能的重载函数:
void append(const char * s);
MyString & append(const char * s);
请问这个设计是否合理?如果不合理,应该怎么改正?
(6)假设 MyString 类中有一个整型静态成员 total,用于记录系统中 MyString 类型的对
象的个数,请问在哪里、以何方式初始化该变量?为访问该变量,应提供什么样的
函数?
(7)假设 MyString 类已经设计好,请问下面的程序段哪一句不能运行?去掉不能运行的
一句后,运行该程序段会调用哪些函数?
{
MyString str("I love C++!");
const MyString str2 = str;