樱井莉亚电影 工夫瞎想实习MOOC / 秉承和派生——编程功课 第五周工夫填空题1

写一个MyString 类樱井莉亚电影,使得底下工夫的输出着力是: 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8. ijAl- 9. ijAl-mnop 10. qrst-abcd- 11. abcd-qrst-abcd- uvw xyz about big me樱井莉亚电影 take abcd qrst-abcd- 要 求:MyString类必须是从C++的圭臬类string类派生而来。教导1:要是...


樱井莉亚电影 工夫瞎想实习MOOC / 秉承和派生——编程功课 第五周工夫填空题1

写一个MyString 类樱井莉亚电影,使得底下工夫的输出着力是:

1. abcd-efgh-abcd-

2. abcd-

3.

4. abcd-efgh-

5. efgh-

6. c

7. abcd-

8. ijAl-

9. ijAl-mnop

10. qrst-abcd-

11. abcd-qrst-abcd- uvw xyz

about

big

me樱井莉亚电影

take

abcd

qrst-abcd-

要 求:MyString类必须是从C++的圭臬类string类派生而来。教导1:要是将工夫中通盘 "MyString" 用"string" 替换,那么题研究工夫中除了临了两条语句编译无法通过外,其他语句齐莫得问题,况兼输出和前边给的着力吻合。也便是说,MyString类对 string类的功能推行只体目下临了两条语句上头。教导2: string类有一个成员函数 string substr(int start,int length); 未必求从 start位置脱手,长度为length的子串

工夫:

想路:

好了这题仍是得胜恶心我了一整天,翌日还有个魔兽的题,今晚写罢了收缩会儿,翌日不时罗致挑战。。

行为全部“秉承和派生”单位的功课编程题,果然是把这块常识玩到极致了,就拿这个题来说,相配全面概述的考试了对string类秉承的方方面面

有些部分的想路在代码中仍是作念了凝视,还有些没说的单独拿出来说一下:

对于operator+的运算符重载,领先在C++官方文档上赢得到operator+的3个可能会被这题用到的重载函数

然后咱们再来看这题中出现过+的场所

(1)

先不说‘=’,单看+操作符,迷漫不错调用父类中的a圭表齐全

(2)

不异不看‘=’,东京热官网这条语句+的操作不错通过父类中c圭表齐全

(3)

该语句不错通过b圭表齐全

OK,既然三个操作在父类中齐有相应的成员函数不错齐全,咱们为什么还要我方折腾去重写呢?便是因为它的复返值!在这个工夫的(1)(2)(3)这三条语句中,每一个在进行完加法操作后并莫得扬弃,而是接着进行了赋值的操作——这便是关键点,罗致他们+复返值的是一个MyString类的对象,也便是一个子类,而要是咱们通过父类的已有operator+去调用他们的着力,复返值是一个父类即string类的对象,而父类的对象是无法赋值到子类上去的。因此咱们要重写父类中的这三个operator+,其实也只需要将他们的复返值作念出相应的更正就好。

 樱井莉亚电影

然后再说一下string类中的c_str()函数,先看下C++Reference中对它的界说

const char* c_str() const noexcept;

The pointer returned points to the internal array currently used by the string object to store the characters that conform its value.

说白了便是把string中存储的践诺给放到一个char数组中,然后复返这个数组的首地址,const char* 类型

这里由于咱们重写operator+的复返值条款是MyString类型的,是以在return的时期要构建MyString类的对象,而它的有参构造函数就只可罗致const char*类型的参数,是以咱们有必要作念出这样一步转机。

 

main函数的第一转s4(s1)一脱手的时期我对这个相比有疑问,因为起首AC的代码没写复制构造函数,用的编译器自动生成的,我就不睬解为什么也不错AC,其后经博主修起编译器自动生成的复制构造函数齐是形如A (const A&)这样的,而对于MyString这个类来说,由于它是子类,生成的默许复制构造函数也要自动调用父类的复制构造函数。

工夫中创建MyString类的对象数组时,等号右边的赋值情势相配于调用了类型转机构造函数,这个场统共个点很容易出错,即当咱们工夫中的类不错用类型转机构造函数创建的时期,即咱们不错平直在等号右边用相应的类型变量对该类进举止手化的时期,要是咱们的复制构造函数的参数被咱们写成了A&而非const A&,就会出现多个候选项的问题,即编译器会报错,不知说念到底该调用哪个构造函数,因此在重写复制构造的时期一定要扎眼参数是const A&

丝袜控

 



相关资讯