Re: Cast to derived class?
* christian.pontesegger@googlemail.com:
Hi all,
lately I had a problem where I wanted to cast a basic class to a
derived type, which did not introduce any new members and did not
change any stuff with dynamically allocated memory. I just wanted to
add some methods to the class.
So my question is:
Is it valid C++ to create a basic class and to cast it to a derived
one the way I did in my example below?
No, it's Undefined Behavior.
Example code:
<code>
#include <stdio.h>
class Basic {
public:
Basic(int a, int b) {
a_ = a;
b_ = b;
};
int getA() {
return a_;
};
The prefix "get" serves no useful purpose. It just clutters the code
and incorrectly indicates some dynamic action to obtain the value.
int getB() {
return b_;
};
private:
int a_, b_;
};
class Derived : Basic {
public:
Derived(int a, int b) : Basic(a, b) {}
;
int multiply() {
return getA() * getB();
};
};
int main() {
Basic *basic = new Basic(2, 4);
Derived *derived = (Derived *)basic;
printf("%d * %d = %d\n", basic->getA(), basic->getB(), derived-
multiply());
delete basic;
return 0;
}
</code>
All you're achieving is the member function notation, and that's far too
little to justify using implementation specific behavior.
Instead, in this particular case, define
int productOver( Base const& x ) { return x.a()*x.b(); }
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?