`

Item 36 非虚拟的成员函数不能重定义

 
阅读更多

虚函数才是动态绑定,在运行时根据指针指向的对象的实际类型,决定调用的函数。
引用和指针是一样的,对于非虚拟函数,都是静态绑定。
一个“非虚拟”函数就意味着,某个类体系都要有这样一个共同的行为,所以在设计上重定义非虚拟函数也是错误的,会误导客户。
Item 7说过,多态的dtor也要虚拟,和本文是一样的道理,都是不希望函数被静态绑定。

分享到:
评论

相关推荐

    Qt 基于QGraphicsItem类重载鼠标事件函数的教训

    在开发一个基于Qt的项目,如一个简单的俄罗斯方块游戏时,我们可能会遇到需要对图形元素进行交互的需求,这时候就需要重载`QGraphicsItem`类的鼠标事件函数。本文将深入探讨这个主题,以避免在实际开发中重复遇到...

    C++primer sales_item

    非成员函数可以独立于`Sales_item`类存在,但仍然可以访问类的私有成员,因为它们被声明为友元。 通过`Sales_item`类的学习,我们可以深入理解C++中的对象、类、构造函数、友元、操作符重载、输入输出流操作以及...

    MDX函数[定义].pdf

    在MDX中,函数是构建复杂查询和计算的重要工具,涵盖多种类型,如数组函数、层次结构函数、维度函数、级别函数、逻辑函数、成员函数和数值函数等。 1. **数组函数**: - `SetToArray (MDX)`:此函数将一个或多个...

    解析C++中的虚拟函数及其静态类型和动态类型

    此外,关于继承而来的默认参数值,根据《Effective C++》Item37的建议,不应重新定义,这是因为在调用具有继承默认参数的函数时,编译器可能会根据静态类型来解析参数,导致意外的结果。如果派生类重定义了默认参数...

    虚拟列表控件的列优化

    虚拟列表控件(Virtual CListCtrl)的核心特性在于其“虚拟”模式,允许开发者仅在需要时动态地提供行数据,而非一次性加载所有数据到内存中。这种方式在处理大量行数据时非常有效,因为减少了内存占用和渲染时间。...

    Sales_item头文件

    在`C++Primer`中,你会看到如何实例化`Sales_item`对象,如何使用这些成员函数,以及如何通过重载运算符处理对象。例如,你可以读取一系列的销售记录,然后对它们进行汇总: ```cpp std::ifstream in("sales_data....

    如何使用LISTVIEW虚拟模式和Checkbox

    如果`ListView`控件的显示模式设置为`Details`,则必须为每一列都提供数据,不能遗漏。 ```vbnet listitem = New ListViewItem(dt_数据表.Rows.Count) {} Dim i As Integer = 0 For Each row1 As DataRow In dt_...

    C++ PRIMER 4th Sales_item.h

    Sales_item 类定义了三个成员变量: * isbn:表示销售项目的 ISBN 号。 * units_sold:表示销售项目的销售数量。 * revenue:表示销售项目的总收入。 成员函数 Sales_item 类提供了多种成员函数,包括: * avg_...

    QTreeWidgetItem的setData(int column,int role,QVariant& data)等,

    比如QTableWidgetItem的setData(int column,QVariant& data)和QTreeWidgetItem的setData(int column,int role,QVariant& data)等,通过setData函数我们可以为每个单元格保存自己想绑定的数据及为每个树节点保存想...

    C++函数的定义和调用

    - 函数原型语句:在一个函数定义中,除了函数体外的部分被称为函数头,包含了函数的返回类型、参数列表等信息。如果没有显式声明函数原型,系统会从函数定义中自动获取这些信息。 - 函数声明:为了确保函数能够被...

    QML虚拟键盘 输入法

    **QML虚拟键盘 输入法详解** QML,全称Qt Meta Language,是Qt框架下的一种声明式编程语言,主要用于构建用户界面。它以其简洁、直观的语法和强大的可视化设计能力,使得开发人员能够轻松地创建出美观且动态的UI。...

    Sales-item.h与Version.h下载(C++Primer)

    首先,`Sales_item.h` 文件通常定义了一个名为 `Sales_item` 的类,该类用于表示书籍销售记录。这个类可能包含如下属性和方法: 1. **属性**: - `bookNo`:书籍的唯一标识符,通常为字符串类型。 - `quantity`:...

    虚拟列表ListContrl

    在虚拟模式下,`CListCtrl`并不直接管理数据项,而是通过回调函数的方式请求数据。当列表中的某一项需要被显示时,它会发送一条消息给父窗口,询问该数据项的信息。这样可以大大降低内存消耗,并且提高列表刷新的...

    MDX_函数参考

    - **ValidMeasure**:通过将不适用的维度强制到其顶层,来返回虚拟多维数据集中的有效度量值。 成员函数是MDX中最核心的功能之一,通过这些函数可以实现对成员的精确控制和灵活处理。 #### 八、数值函数 数值函数...

    Sales_item_C++_

    这两个函数通常不是成员函数,而是作为友元函数实现,因为它们需要访问类的私有成员。例如: ```cpp void read(std::istream &is, Sales_item &item) { double price = 0; is >> item.isbn >> item.units_sold >>...

    QGraphicsItem鼠标大小缩放

    1. **定义QGraphicsItem子类**:首先,创建一个继承自QGraphicsItem的自定义类,比如`ResizableItem`。在这个类中,我们将实现鼠标事件处理函数,以便捕捉用户的鼠标操作。 2. **覆盖默认行为**:重写`boundingRect...

    基于QML的虚拟键盘

    在虚拟键盘的实现中,常见的元素包括`Item`(基础组件)、`Rectangle`(矩形)、`Button`(按钮)等。 虚拟键盘的核心是按键布局,这可以通过在QML文件中定义一系列的`Button`元素来完成。每个按钮都可以设置其文本...

    WPF中ItemsControl应用虚拟化时找到子元素的方法

    由于虚拟化机制,不是所有子元素都存在于UI树中,因此不能直接通过逻辑树查找。以下是一些方法来解决这个问题: 1. **数据绑定索引**:在数据项上设置一个唯一的标识符,如索引。然后,在事件处理程序或代码中,...

    QGraphicsItem自定义图元,拖动绘制,拖动拉伸缩放图元

    Qt的信号和槽机制是实现这些功能的关键,通过连接`QGraphicsItem`的事件处理函数(如`mouseMoveEvent`)到合适的槽函数,你可以实现图形元素的交互行为。 7. **优化和性能**: 当处理大量图元或者复杂的交互时,...

    QGraphicsItem边缘控制拉伸

    要实现自定义的图形项,我们需要继承QGraphicsItem,并重写其必要的虚函数,如`boundingRect()`、`paint()`和`shape()`等,以定义图形的边界、绘制逻辑和碰撞检测。 对于边缘拉伸功能,我们需要关注的是`...

Global site tag (gtag.js) - Google Analytics