赋值运算符继承 [英] Assignment operator inheritance

查看:171
本文介绍了赋值运算符继承的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有以下代码:

  #include< iostream> 

class Base {
public:
Base(){
std :: cout< 构建子碱基<< std :: endl;
}
〜Base(){
std :: cout<< 析构函数库< std :: endl;
}
Base& operator =(const Base& a){
std :: cout<< 赋值基<< std :: endl;
}
};

类派生:public Base {
public:

};

int main(int argc,char ** argv){
Derived p;
派生p2;
p2 = p;
return 0;
}

g ++ 4.6编译后的输出:

 构造函数库
构造函数库
赋值基
析构函数库
析构函数库

为什么会调用基类的赋值运算符,因为它不能继承赋值运算符?



 派生& operator =(const Base& a); $  类中的

>

但是,创建了一个默认赋值运算符:

  operator =(const Derived& a); 

,这会从 Base 。所以这不是继承赋值运算符,而是通过派生类中的默认生成运算符来调用它。


There is this code:

#include <iostream>

class Base {
public:
    Base(){
        std::cout << "Constructor base" << std::endl;
    }
    ~Base(){
        std::cout << "Destructor base" << std::endl;
    }
    Base& operator=(const Base& a){
        std::cout << "Assignment base" << std::endl;
    }
};

class Derived : public Base{
public:

};

int main ( int argc, char **argv ) {
    Derived p;
    Derived p2;
    p2 = p;
    return 0;
}

The output after compilation by g++ 4.6:

Constructor base
Constructor base
Assignment base
Destructor base
Destructor base

Why assignment operator of base class is called altough it is said that assignment operator is not inherited?

解决方案

You don't have a default

Derived& operator=(const Base& a);

in your Derived class.

A default assignment operator, however, is created:

Derived& operator=(const Derived& a);

and this calls the assignment operator from Base. So it's not a matter of inheriting the assignment operator, but calling it via the default generated operator in your derived class.

这篇关于赋值运算符继承的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆