"Leigh Johnston" <> wrote in message
news:V_SdnTIe-...
> On 01/03/2011 00:17, Paul wrote:
>>
>> "Leigh Johnston" <> wrote in message
>> news: ...
>>> On 28/02/2011 23:54, Paul wrote:
>>>>
>>>> "Öö Tiib" <> wrote in message
>>>> news:fd3e7076-47da-40f3-aa05-...
>>>>
>>>> On Feb 28, 9:45 pm, "Paul" <pchris...@yahoo.co.uk> wrote:
>>>>> " Tiib" <oot...@hot.ee> wrote in message
>>>>>
>>>>> news:7e2e42b3-2410-443a-95c2-...
>>>>>
>>>>> On Feb 25, 11:07 am, "Paul" <pchris...@yahoo.co.uk> wrote:
>>>>>
>>>>>
>>>>>
>>>>> > Please let me know if you still do not understand and I will >
>>>>> re-explain
>>>>> > again.
>>>>>
>>>>> --Your code does not work. You can not overwrite object 'Dog dog;' in
>>>>> a
>>>>> --way that Cat's destructor is called for it when that dog leaves
>>>>> --scope ... Dog's destructor is called for it on all C++ compilers i
>>>>> --could reach. What destructor will be called is pre-decided and set
>>>>> --already compile time. So it seems that you do not understand
>>>>> yourself
>>>>> --what you are talking about.
>>>>>
>>>>> #include <iostream>
>>>>> class Animal{};
>>>>> class Dog: public Animal{};
>>>>> class Cat: public Animal{};
>>>>>
>>>>> int main()
>>>>> {
>>>>> Cat* p_cat = new Cat;
>>>>> std::cout<< p_cat << std::endl;
>>>>> delete p_cat;
>>>>> Dog* p_dog = reinterpret_cast<Dog*>(p_cat);
>>>>> p_dog = new Dog;
>>>>> std::cout << p_dog;
>>>>>
>>>>>
>>>>>
>>>>> }
>>>>
>>>> --What does this code overwrite?
>>>> --Also ... most compilers optimize the two lines:
>>>>
>>>> --Dog* p_dog = reinterpret_cast<Dog*>(p_cat);
>>>> --p_dog = new Dog;
>>>>
>>>> --Into something like:
>>>>
>>>> -- Dog* p_dog = new Dog;
>>>>
>>>> It doesn't trully overwrite anything but its the closet example I can
>>>> give, using C++ code.
>>>>
>>>> Here is some code that demonstrates a similar thing:
>>>>
>>>> #include <iostream>
>>>> class Animal{public:
>>>> virtual void eat(){std::cout<< "Animal Eating"<< std::endl;}
>>>> virtual int getID()=0;
>>>> static int count;
>>>> };
>>>> class Dog: public Animal{
>>>> public:
>>>> void eat(){std::cout<< "Dog Eating"<< std::endl;}
>>>> int getID(){return 1;}
>>>> };
>>>> class Cat: public Animal{
>>>> public:
>>>> void eat(){std::cout<< "Cat Eating"<< std::endl;}
>>>> int getID(){return 0;}
>>>> };
>>>> int Animal::count =10;
>>>>
>>>> Dog* overwriteCat(Animal* ptr){
>>>> delete ptr;
>>>> Dog* p = reinterpret_cast<Dog*>(ptr);
>>>> p = new Dog;
>>>> return p;
>>>> }
>>>>
>>>> Cat* overwriteDog(Animal* ptr){
>>>> delete ptr;
>>>> Cat* p = reinterpret_cast<Cat*>(ptr);
>>>> p = new Cat;
>>>> return p;
>>>> }
>>>>
>>>>
>>>> void ordinary_function(Animal* obj){
>>>> Animal::count--;
>>>> std::cout<<"Address of obj: " <<obj << " ";
>>>> obj->eat();
>>>> if(obj->getID()){overwriteDog(obj);}
>>>> else {overwriteCat(obj);}
>>>> if(Animal::count){
>>>> ordinary_function(obj);
>>>> }
>>>> }
>>>>
>>>> int main()
>>>> {
>>>> Cat* p_cat = new Cat;
>>>> Animal* p_anim = p_cat;
>>>>
>>>> ordinary_function(p_cat);
>>>> }
>>>>
>>>>
>>>> You cannot do this type of recursion with a member function, a member
>>>> function belongs to the object with which its called.
>>>>
>>>
>>> In C++ a member function does not belong to a particular object; in
>>> C++ a non-static member function is invoked on an object; in C++ a
>>> member function is a member of a class not an object.
>>>
>>
>> If its a member of the class its also a member of the object you
>> f*#"&i%$ moron.
>> If its a member of a class and not a member of an object it can only be
>> a static class member.
>>
>> Please keep your ignorant, negative , spamming comments to yourself if
>> you have no reasoning to support your argument.
>
> You have been reasoned with many times by many people; you prefer to
> ignore reason; your behaviour is childish at best.
>
Shut up idiot and keep your **** out of my threads.
|