zoukankan      html  css  js  c++  java
  • How to use base class's assignment operator in C++

    看了android下的代码,好长时间没看了,有个关于C++的知识点不是很清楚,查了下:

    如何使用基类中的赋值运算符?

    引述自http://stackoverflow.com/questions/1226634/how-to-use-base-classs-constructors-and-assignment-operator-in-c

    参考:《C++ Primer》4ed_CN  p_495

    编译器的默认设置:

    struct base
    {
       base() { std::cout << "base()" << std::endl; }
       base( base const & ) { std::cout << "base(base const &)" << std::endl; }
       base& operator=( base const & ) { std::cout << "base::=" << std::endl; }
    };
    struct derived : public base
    {
       // compiler will generate:
       // derived() : base() {}
       // derived( derived const & d ) : base( d ) {}
       // derived& operator=( derived const & rhs ) {
       //    base::operator=( rhs );
       //    return *this;
       // }
    };
    int main()
    {
       derived d1;      // will printout base()
       derived d2 = d1; // will printout base(base const &)
       d2 = d1;         // will printout base::=
    }

    如果我们在派生类中自己定义了拷贝构造函数、"="重载运算符,那么我们就需要显示的调用基类中的拷贝构造函数和基类中的“=”重载运算符。

    class Base
    {
        /* .. */
    };
    
    class Derive: public Base
    {
        //如果没有显式调用Base(d),则调用Base中的无参的Base拷贝构造函数
        Derived(const Derived &d): Base(d) 
        {
            /* ... */
        }
    
        Derived &Derived::operator=(const Derived &rhs)
        {
            if(this != &rhs)
            {       
                Base::operator=(rhs);
                /* ... */
            }       
    
            return *this;
        }
    };
  • 相关阅读:
    动态存储区(堆)、动态存储区(栈)、静态存储区、程序代码区
    auto, extern, register, static
    #include <iomanip>
    use
    ZooKeeper某一QuorumPeerMain挂了
    python 中的 字符串 列表 元祖 字典
    JAVA的23种设计模式
    spark job分析
    Spark1
    SQL三大范式
  • 原文地址:https://www.cnblogs.com/openix/p/3251293.html
Copyright © 2011-2022 走看看