1= Class_Name( Class_Name& object_name )
2= Class_Name( const Class_Name& object_name )
Если оба этих конструктора копирования определены пользователем, то есть ли какой-либо способ выполнить конструктор (2) копирования (принимая во внимание концепцию копирования)?
Отвечая на ваш вопрос... экземпляр-конструктор 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;
Вот один пример:
const Class_Name ob1;
Class_Name ob2 = ob1;
Это вызовет вторую версию конструктора копирования. Это потому, что ваш ob1 определяется как константа. Я бы посоветовал вам читать википедию один раз, довольно хорошо объяснил. http://en.wikipedia.org/wiki/Copy_constructor