10.4/6 Abstract classes
От: Аноним  
Дата: 09.06.08 08:00
Оценка:
class A{
public:
    A(){
     //foo();//GCC error:abstract virtual ‘virtual void A::foo()’ called from constructor
             //VC2005 ok!!!
     //UB
        A::foo();//ok? 
        this->foo();//ok?
    }
    virtual ~A(){
     //foo();//GCC error: abstract virtual `virtual void A::foo()’ called from destructor
        //VC2005 ok!!!
     //UB
        A::foo();//ok?
        this->foo();//ok?
        }
    virtual void foo()=0;
};
void A::foo(){  cout<<"Class A"<<endl; }

class B: public A{
public:
    B(){
        this->foo();
    }
    ~B(){}
    void foo(){
        cout<<"Class B"<<endl;
    }
};

int main() {
    B obj;
    B *b=new B;
    A *a=b;
    a->foo();
    delete b;
    return 0;
}


10.4 Abstract classes

6 Member functions can be called from a constructor (or destructor) of an abstract class; the effect of making a vir¬tual call (10.3) to a pure virtual function directly or indirectly for the object being created (or destroyed) from such a constructor (or destructor) is undefined.



//foo();//GCC error:abstract virtual ‘virtual void A::foo()’ called from constructor
        //VC2005 ok!!!
A::foo();   //Действительно ли ok или UB? 
this->foo();//Действительно ли ok или UB?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.