×

Loading...

Topic

This topic has been archived. It cannot be replied.
  • 相约北美 / 移民留学 / what's wrong with this code?
    class Base {
    public:
    Base(int initialValue = 0): x(initialValue) {}

    private:
    int x;
    };

    class Derived: public Base {
    public:
    Derived(int initialValue)
    : Base(initialValue), y(initialValue) {}

    Derived& operator=(const Derived& rhs);

    private:
    int y;
    };

    Derived& Derived::operator=(const Derived& rhs)
    {
    if (this == &rhs) return *this;
    y = rhs.y;
    return *this;
    }
    • 还是shallow copy, x没copy
      • then, how to make a deep one?
        • 基类里也需要有赋值copy
          • how to copy, it's private.
            • 自己好好动动脑筋,derived里y一样是private的,你怎么能做到?
              • 那是自己的member function 里面,当然可以访问,基类就不行了。
                • 基类里面你就不能再加个函数?
                  • 如果不想动基类,有没有解决方法?
                    • 有,不过那样的解决方法就是不合乎C++规范的了,既然你是初学还是养成好的编程习惯吧,人家明明叫private,就让人家名副其实吧
                      • 既然有,何不说出来让我这初学者见识见识?藏着揶着不好吧?
                        • use friend function. but it's not very good to use.
                          • 谢谢指教。老九哥,您是不是也这个主意?如果是,还是C++方法么。怎么说不是?
                            • 我不是这个主意,我是用指针
                              • 怎么玩法呢?
                            • 我是搞C出身的,所以经常用些不规范的办法,编程经常会给维护的人留下一些陷阱,这是坏习惯,不是故意藏着掖着,实在是自己的C++水平有限,怕误导别人
                              • 我知道了,无非是算指针偏移量。
                        • 我见过一个C++解决方法。
                          static_cast<Base&>(*this) = rhs;
    • 哥们,你这不是Effective C++第16个item讨论的例子吗?