banner

ammal的构造函数,从而生成第1行输出。在第40行,创建了一个名为fido的Dog对象,这生成了接下来的两行输出:依次调用Mammal和Dog的构造函数。

第41行对Mammal对象调用了方法speak(),接下来第42行对Dog对象调用了speak()方法。输出表明,调用的方法是正确的。最后,这两个对象不再在作用域中,导致析构函数被调用。

tips

16.5.1 重载和重写

术语重载和重写相似,在C++中的功能也类似。重载成员函数时,创建了多个名称相同但签名不同的函数。而重写成员函数时,在派生类中创建了一个名称和签名都与基类函数相同的函数。

问题需要引起你的重视。你要避免一种情况出现,那就是你在离开

原公司自立门户的时候,原来的老板可以说你的知识产权—甚至是你的创意—都是你在为他

工作时产生的。因此你要考虑的一个重要问题是:你开始为现在的老板工作时签署过怎样的

协议。你是否签署过要求你在一定时间内不得受雇于另一家类似企业的竞业禁止协议?你是

否签署过“卖身契”?规定你在受雇于这家企业的时候,你所创造的一切都属于雇主的知识产

权?

记住,你不应该仅仅把自己放在一个可能胜诉的位置上,而是要尽力完全避免这些灰色

区域,因为没有创业者希望在打官司这件事情上浪费自己宝贵的资源。恐怕没有比打官司更

达式——内存分配的腹地

如果 placement-params 是 std::nothrow 或单个指针以外的其他东西,那么这个 new 表达式就被称为自定义定位放置 new 表达式。C++ 没有对自定义定位放置 new 表达式强加任何意义。这可以让开发人员以一种未受指定的方式分配存储空间。自定义定位放置 new 表达式会寻找这样的 new() 运算符或 new[]() 运算符的重载版本:其第一个参数是 size_t 类型,接下来的参数匹配表达式列表中的类型。如果动态对象的构造函数抛出了异常,那么自定义定位放置 new 表达式会寻找这样的 delete() 运算符或 delete[]()