наследование — в C ++ конструктор, который принимает базовый класс в качестве конструктора копирования?

Например:

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?
}
};
  1. Показан ли указанный конструктор как конструктор копирования?
  2. Показан ли оператор присваивания как оператор присваивания копии?

4

Решение

Показан ли указанный конструктор как конструктор копирования?

Нет не считать как конструктор копирования.
Это просто конструктор преобразования не конструктор копирования.

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=
8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]