2015-01-06 2 views
-5
class Base 

{ 

    private: 

    int _b; 

    public: 

    Base(); 

    Base(int b); 

    virtual void display(); 

    //Assignment operator overload. 

    Base& operator=(const Base&); 

}; 

Base::Base() 

{ 

    _b = 0; 

} 

Base::Base(int b) 

{ 

    _b = b; 

} 

void Base::display() 

{ 

    cout<<"base value := "<<_b<<endl; 

} 

Base& Base::operator=(const Base& ob) 

{ 

    //Check for self-assignment. 

    if(this != &ob) 

    { 

     this->_b = ob._b; 

    } 

    return *this; 

} 

class Derived : public Base 

{ 

    private: 

    int _d; 

    public: 

    Derived(); 

    Derived(int d); 

    void display(); 

    //Assignment operator overload. 

    Derived & operator=(const Derived& ob); 

}; 

Derived::Derived() : Base() 

{ 

    _d = 0; 

} 

Derived::Derived(int d) : Base(d) 

{ 

    _d = d; 

} 

void Derived::display() 

{ 

    cout<<"Derived value := "<<_d<<endl; 

} 

Derived & Derived::operator=(const Derived& ob) 

{ 

    if(this != &ob) 

    { 

     this->_d = ob._d; 

    } 

    return *this; 

} 

int main() 

{ 

    Derived d1(10),d2(),d3; 

    //How d2 becomes lvalue and not d3 above. 

    d2 = d1;//Error :: expression must be modified lvalue. 

    //d2.display(); 

    d3 = d1; 

    return 0; 

} 
+1

Каков ваш вопрос? – NPE

+1

Вы просмотрели предварительный просмотр, когда задали вопрос? Как вы можете видеть, это довольно непроницаемо. Исправьте форматирование. – Magnilex

+1

'd2()' объявляет функцию (не принимает аргументов и возвращает 'Derived'), остерегайтесь. – dyp

ответ

1
Derived d2(); 

трактуется как объявление функции. Сделайте это: -

Derived d1(10),d2,d3; 
d2 = d1;   /////ahaa it's working 
0

Проблема заключается в вашем «d2()». Оператор d2() не создает производный объект d2, как вы думаете. Правильные варианты:

Derived d2; 
Derived d2 = Derived(); 
Derived d2(0); // or any other integer 

Заявление

Derived d2(); 

сообщает компилятору, что вы определяете функцию, которая не принимает никаких аргументов и возвращает тип Derived.

Смотрите здесь для более длительного объяснения: error: request for member '..' in '..' which is of non-class type

 Смежные вопросы

  • Нет связанных вопросов^_^