运算符和副本构造函数的重载

时间:2019-01-23 14:22:10

标签: c++ overloading

C ++需要创建副本的构造函数,以将一个实例分配给另一个实例。例如:

input.onclick = function () {
    this.value = null;
};

如果我隐含复制,那是错误的,因为它可以作为地址的分配。因此,如果我更改import os,os.path import sys from PyQt5 import uic, QtWidgets from PyQt5.QtCore import pyqtSlot import PyQt5.QtGui as QtGui from PyQt5.QtWidgets import QApplication, QDialog, QAction from PyQt5.uic import loadUi from win32com.client import Dispatch as comDispatch image_path = "foto.png" qtCreatorFile = "inicio1.ui" Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile) class Iniciar(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) Ui_MainWindow.__init__(self) self.setupUi(self) self.label_4.setPixmap(QtGui.QPixmap(image_path)) self.setWindowTitle('Tela de inicio do programa!!') my_class a = b; 也将被更改。因此,我应该创建copy的构造函数:

a

看起来很明显,休息时不用说,但是当我发现有关重载运算符时,我感到怀疑:

b

结果是我可以将其用作赋值,而不必使用副本的构造函数。那正确吗?但是,为什么放置在my_class(const my_class &obj); 的定义中的分配可以复制。

1 个答案:

答案 0 :(得分:1)

您可以使用或副本分配以及副本的构造函数。

            for (int i = eventViewer.GetErrorEventsCount() - 1; i >= 0; i--)
        {
            bResult = eventViewer.SelectMainEventViaErrorEvent(i);
            if (!bResult)
            {
                break;
            }

            System.Threading.Thread.Sleep(2000);
        }

以下是示例实现:

        public bool SelectMainEventViaErrorEvent(int eventIdx)
    {
        bool bSuccess = false;
        DisableToolTips(true);

        errorEvents.Select(eventIdx);
        errorEvents.SelectedItem.DoubleClick();

        System.Threading.Thread.Sleep(1000);

        log.Info($"SelectMainEventViaErrorEvent({eventIdx}) selected error event = {errorEvents.SelectedItemText}");
        log.Info($"SelectMainEventViaErrorEvent({eventIdx}) selected main event = {mainEvents.SelectedItemText}");

        if (errorEvents.SelectedItemText == mainEvents.SelectedItemText)
        {
            bSuccess = true;
        }

        return bSuccess;
    }

您还可以提供特殊检查来避免自我分配,例如class A { A(const A& a); A& operator=(const A& a); }; A a1; A a2(a1); // calling constructor of copies A(const A& a); A a2 = a1; // also calling constructor of copies A(const A& a); A a3; a3 = a1; // calling copy assignment operator=(const A& a);