Merge pull request #70 from cellspace/master

Modify some inappropriate translations
This commit is contained in:
Yang Yi 2021-01-21 10:51:51 +08:00 committed by GitHub
commit 4789409036
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 10 deletions

View File

@ -3,10 +3,7 @@
如果你写的代码要被其他人使用你不想让他们调用某个特殊的函数你通常不会声明这个函数。无声明不函数。简简单单但有时C++会给你自动声明一些函数,如果你想防止客户调用这些函数,事情就不那么简单了。
上述场景见于特殊的成员函数即当有必要时C++自动生成的那些函数。Item 17 详细讨论了这些函数但是现在我们只关心拷贝构造函数和拷贝赋值运算符重载。This chapter is largely devoted to common practices in
C++98 that have been superseded by better practices in C++11, and in C++98, if you
want to suppress use of a member function, its almost always the copy constructor,
the assignment operator, or both.
上述场景见于特殊的成员函数即当有必要时C++自动生成的那些函数。Item 17 详细讨论了这些函数但是现在我们只关心拷贝构造函数和拷贝赋值运算符重载。本节主要致力于讨论C++98中那些被C++11所取代的最佳实践而且在C++98中你想要禁止使用的成员函数几乎总是拷贝构造函数或者拷贝赋值函数或者两者都是。
在C++98中防止调用这些函数的方法是将它们声明为私有成员函数。举个例子在C++ 标准库*iostream*继承链的顶部是模板类`basic_ios`。所有`istream`和`ostream`类都继承此类(直接或者间接)。拷贝`istream`和`ostream`是不合适的,因为要进行哪些操作是模棱两可的。比如一个`istream`对象,代表一个输入值的流,流中有一些已经被读取,有一些可能马上要被读取。如果一个`istream`被拷贝,需要像拷贝将要被读取的值那样也拷贝已经被读取的值吗?解决这个问题最好的方法是不定义这个操作。直接禁止拷贝流。

View File

@ -1,9 +1,9 @@
## Item 12:使用override声明重函数
条款12:使用override声明重函数
## Item 12:使用override声明重函数
条款12:使用override声明重函数
在C++面向对象的世界里,涉及的概念有类,继承,虚函数。这个世界最基本的概念是派生类的虚函数重写基类同名函数。令人遗憾的是虚函数重写可能一不小心就错了。给人感觉语言的这一部分设计观点是墨菲定律不是用来遵守的,只是值得尊敬的
在C++面向对象的世界里,涉及的概念有类,继承,虚函数。这个世界最基本的概念是派生类的虚函数重写基类同名函数。令人遗憾的是虚函数重写可能一不小心就错了。似乎这部分语言的设计理念是不仅仅要遵守墨菲定律,还应该尊重它
鉴于"重写"听起来像"重载",尽管两者完全不相关,下面就通过一个派生类和基类来说明什么是虚函数重写
虽然"重写(overriding)"听起来像"重载(overloading)",然而两者完全不相关,所以让我澄清一下,正是虚函数重写机制的存在,才使我们可以通过基类的接口调用到派生类的成员函数
```cpp
class Base {
@ -27,7 +27,7 @@ upb->doWork(); // 通过基类指针调用doWork
要想重写一个函数,必须满足下列要求:
+ 基类函数必须是`virtual`
+ 基类和派生类函数名必须完全一样(除非是析构函数
+ 基类和派生类函数名必须完全一样(除非是析构函数)
+ 基类和派生类函数参数必须完全一样
+ 基类和派生类函数常量性(constness)必须完全一样
+ 基类和派生类函数的返回值和异常说明(exception specifications)必须兼容
@ -183,5 +183,5 @@ auto vals2 = makeWidget().data(); //调用右值重载版本的Widget::data,
**记住**
+ 为重函数加上`override`
+ 为重函数加上`override`
+ 成员函数限定让我们可以区别对待左值对象和右值对象(即`*this`)