在C ++中,将基类计数为复制构造函数的构造函数是什么?

时间:2013-02-17 07:02:08

标签: c++ inheritance copy-constructor copy-assignment

例如:

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. 是否显示赋值运算符计为副本赋值运算符?

1 个答案:

答案 0 :(得分:8)

  

显示的构造函数是否算作复制构造函数?

没有。它计为复制构造函数 它只是一个转换构造函数而不是复制构造函数。

C ++ 03标准复制类对象 第2段:

  

如果第一个参数的类型为XX&const X&volatile X&,则类const volatile X&的非模板构造函数是一个复制构造函数,并且没有其他参数,或者所有其他参数都有默认参数。


  

显示的赋值运算符是否算作复制赋值运算符?

不,它没有。

C ++ 03 Standard 12.8复制类对象 第9段:

  

用户声明的复制赋值运算符X::operator=是类X的非静态非模板成员函数,其中只有一个类型XX&的参数, const X&volatile X&const volatile X&


<强> Online Sample:

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