Например:
class Derived : public Base
{
Derived(const Base &rhs)
{
// Is this a copy constructor?
}
const Derived &operator=(const Base &rhs)
{
// Is this a copy assignment operator?
}
};
Показан ли указанный конструктор как конструктор копирования?
Нет не считать как конструктор копирования.
Это просто конструктор преобразования не конструктор копирования.
C ++ 03 Standard Копирование объектов класса
Параграф 2:
Не шаблонный конструктор для класса
X
является конструктором копирования, если его первый параметр имеет типX&
,const X&
,volatile X&
или жеconst volatile X&
и либо нет других параметров, либо все остальные параметры имеют аргументы по умолчанию.
Показан ли оператор присваивания как оператор присваивания копии?
Нет, это не так.
C ++ 03 Standard 12.8 Копирование объектов класса
Параграф 9:
Объявленный пользователем оператор копирования
X::operator=
является нестатической не шаблонной функцией-членом классаX
с ровно одним параметром типаX
,X&
,const X&
,volatile X&
или жеconst volatile X&
,
#include<iostream>
class Base{};
class Derived : public Base
{
public:
Derived(){}
Derived(const Base &rhs)
{
std::cout<<"\n In conversion constructor";
}
const Derived &operator=(const Base &rhs)
{
std::cout<<"\n In operator=";
return *this;
}
};
void doSomething(Derived obj)
{
std::cout<<"\n In doSomething";
}
int main()
{
Base obj1;
doSomething(obj1);Derived obj2;
obj2 = obj1;
return 0;
}
Выход:
In conversion constructor
In doSomething
In operator=
Других решений пока нет …