Есть ли способ выполнить конструктор копирования, когда присутствуют два пользовательских конструктора копирования?

0
1= Class_Name( Class_Name& object_name )
2= Class_Name( const Class_Name& object_name )

Если оба этих конструктора копирования определены пользователем, то есть ли какой-либо способ выполнить конструктор (2) копирования (принимая во внимание концепцию копирования)?

  • 0
    По какой-то причине я продолжаю ожидать быстрого ответа «Да, есть».
  • 0
    почему ты не спросил в переполнении стека?
Показать ещё 1 комментарий
Теги:
optimization
constructor

2 ответа

1
Лучший ответ

Отвечая на ваш вопрос... экземпляр-конструктор no (2) может быть выполнен

#include <iostream>

using namespace std;

class Class_Name
{
  public:
  int xx;

  // Copy Constructor No. 1
  Class_Name(Class_Name& objCopy)
  {
      cout << "Copy Constructor No. 1 called" << endl;
  }

  // Copy Constructor No. 2
  Class_Name(const Class_Name& objCopy)
  {
      cout << "Copy Constructor No. 2 called" << endl;        
  }

  Class_Name(int x) : xx(x) {}  /* conversion constructor */
};


int main()
{    
    Class_Name obj1 = 1; // obj1 is not const, 1 is passed "by value", since it primitive type
    Class_Name objCopy1 = obj1; // obj1 is not const, other is not const, obj1 is passed by const reference

    const Class_Name obj2 = 2; // obj2 is const
    Class_Name objCopy2 = obj2;

    return 0;
}

Вывод:

Копировать конструктор № 1 называется

Копировать конструктор № 2 называется

Копирование Elision

Class_Name objCopy1 = Class_Name(obj1);

будет таким же, как

Class_Name objCopy1 = obj1;
  • 1
    Я не понимаю, как с этим связано понятие «копирование».
  • 0
    Я пытался назначить объект R_Value, который неявно вызывал конструктор, а не копировал конструктор с константной ссылкой. Но приведенный выше пример действительно полезен.
0

Вот один пример:

const Class_Name ob1;
Class_Name ob2 = ob1;

Это вызовет вторую версию конструктора копирования. Это потому, что ваш ob1 определяется как константа. Я бы посоветовал вам читать википедию один раз, довольно хорошо объяснил. http://en.wikipedia.org/wiki/Copy_constructor

Ещё вопросы

Сообщество Overcoder
Наверх
Меню