首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中,接受基类的构造函数是否算作副本构造函数?

在C++中,接受基类的构造函数是否算作副本构造函数?
EN

Stack Overflow用户
提问于 2013-02-17 07:02:08
回答 1查看 159关注 0票数 4

例如:

代码语言:javascript
复制
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. 所显示的赋值运算符是否算为副本赋值运算符?
EN

回答 1

Stack Overflow用户

发布于 2013-02-17 07:03:05

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

不是的。它将而不是算作复制构造函数

它只是一个转换构造函数,而不是一个复制构造函数。

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

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

所显示的赋值运算符是否算作副本赋值运算符?

不,不是的。

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

用户声明的复制赋值操作符X::operator=是类X的非静态非模板成员函数,其类型为XX&const X&volatile X&const volatile X&

在线样本:

代码语言:javascript
复制
#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;
}

输出:

代码语言:javascript
复制
In conversion constructor
In doSomething
In operator=
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14918764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档