[译]GotW #5:Overriding Virtual Functions】的更多相关文章

   虚函数是一个很基本的特性,但是它们偶尔会隐藏在很微妙的地方,然后等着你.如果你能回答下面的问题,那么你已经完全了解了它,你不太能浪费太多时间去调试类似下面的问题. Problem JG Question 1. override和final这两个关键字都有什么作用?为什么他们有用? Guru Qusetion 2. 在你浏览公司的代码的时候,你看到了一个未知程序员写的下面的代码片段.这个程序员好像看起来是在练习一些C++特性,想看下它们是怎么工作的. (a)怎么做能改进下面代码的正确性或风格…
Ordinarily, if we do not use a function, we do not need to supply a definition of the function. However, we must define every virtual function, regardless of whether it is used, bacuase compiler has no way to determine whether a virtual function is u…
13.3 How do virtual functions work in C++? 这道题问我们虚函数在C++中的工作原理.虚函数的工作机制主要依赖于虚表格vtable,即Virtual Table.当类中定义了虚函数时,一个虚表格就建立了用来保存该类的虚函数的地址.此时编译器Compiler也会在该类中增加一个虚指针vptr(Virtual Pointer),用来指向虚表格.当一个虚函数在派生类中没有被重写时,派生类中的虚表格中仍然存的是基类的虚函数的地址.当虚函数被调用时,就要到虚表格中取…
原文链接:http://www.drdobbs.com/cpp/standard-c-programming-virtual-functions/184403747 By Josée Lajoie and Stanley Lippman, September 01, 2000 As we gain mastery of C++, it is natural to question the rules of thumb that helped us get by in the beginning.…
你对写一个类的细节有多在行?这条款不仅注重公然的错误,更多的是一种专业的风格.了解这些原则将会帮助你设计易于使用和易于管理的类. JG Question 1. 什么使得接口“容易正确使用,错误使用却很难”?解释一下. Guru Question 2. 你正在代码审查,一个程序员写了下面这个类,里面有一些不良的风格和一写具体的错误.你能发现多少?如何修正? class complex { public: complex( ) : real(r), imag(i) { } void operator…
     const和mutable对于书写安全代码来说是个很有利的工具,坚持使用它们. Problem Guru Question 在下面代码中,在只要合适的情况下,对const进行增加和删除(包括一些微小的变化和一些相关的关键字).注意:不要注释或者改变程序的结构.这个程序只作为演示用途. 另外:程序的哪些地方是由于错误地使用const而导致的未定义行为或不可编译? class polygon { public: polygon() : area{-} {} ; points.push_ba…
There's a lot to love about standard smart pointers in general, and unique_ptr in particular. Problem JG Question 1.什么时候你应该使用shared_ptr vs unique_ptr?尽可能列出你所想到的注意事项. Guru Question 2.为什么你应该总是使用make_shared来创建一个被shared_ptr(s)拥有的对象?请解释. 3.为什么你应该总是使用make_…
const 和 mutable在C++存在已经很多年了,对于如今的这两个关键字你了解多少? Problem JG Question 1. 什么是“共享变量”? Guru Question 2. const 和 mutable对于共享变量来说意味着什么? 3. 在C++98和C++11两者间,const 和 mutable有什么区别? Stop and thinking…… Solution 1. 什么是“共享变量”? 共享变量是在同一时间可以被多个线程同时访问的变量. 这个概念在C++内存模型中…
高效的代码重用是良好的软件工程中重要的一部分.为了演示如何更好地通过使用标准库算法而不是手工编写,我们再次考虑先前的问题.演示通过简单利用标准库中已有的算法来避免的一些问题. Problem JG Question 1. 最广泛使用的C++库是什么? Guru Question 2. 首先,在GotW #2中有多少陷进是可以避免的,如果程序员只是用以下方法替代显示的基于迭代器的for循环:      (a)一个基于范围的for循环?      (b)一个标准库算法调用? (注意:和GotW #2…
    不必要的和(或)临时的变量经常是罪魁祸首,它让你在程序性能方面的努力功亏一篑.如何才能识别出它们然后避免它们呢? Problem JG Question: 1. 什么是临时变量? Guru Question: 2. 假设你正在代码审查,一个程序员写了如下的的一个函数,这个函数至少在三个地方使用了不必要的临时或者额外的对象.你能辨别出哪些?其如何修正它们? string find_addr( list<employee> emps, string name ) { for( auto i…