8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

赋值运算符继承

Caleth 2月前

143 0

有这样的代码:#include类 Base {public: Base(){ std::cout << \'构造函数 base\' << std::endl; } ~Base(){ std::cout << \'

有这样的代码:

#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;
}

经过g++4.6编译后的输出:

Constructor base
Constructor base
Assignment base
Destructor base
Destructor base

为什么虽然说赋值运算符不能被继承,但却调用基类的赋值运算符呢?

帖子版权声明 1、本帖标题:赋值运算符继承
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Caleth在本站《class》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 赋值运算符确实不能被继承。继承该运算符将使你能够将 a 赋值 Base 给 a Derived ,但是 Base b; p = a; (理所当然地)编译失败。

    实际情况是 operator= ,由于您没有为 定义自定义的 , Derived 。自动生成的 operator= 会调用所有基类和所有成员的赋值运算符。在这方面,它与构造函数/析构函数非常相似,它们也会在所有基类/成员上调用相应的函数。

返回
作者最近主题: