Re: base classes and inheritance problem
On Mar 16, 3:32 am, "Alf P. Steinbach" <al...@start.no> wrote:
* zion...@gmail.com:
Hello, considering this code:
class A {
protected:
int n;
};
class B : public A {
public:
void setn(int k){ n = k;}
};
int main()
{
A *c;
c = new B();
c->setn(10);
return 0;
}
This of course will not compile, i'm trying to avoid using virtual
functions in class A and i was wondering if there exist a way of
achieving something like this code.
Since you're wondering about that, and also since you're considering leaving a
data member uninitialized for some time, and also since you're considering a
setter function for that data member, chances are near 100% that you're
relatively (understatement) new to the language and have embarked on a journey
of Evil Premature Optimization, which, if you continue, will lead to much grief.
What do your measurements say about the impact of virtual functions?
Aha, no measurements!
Well, there you are, it's a case of severe, evil premature optimization.
Here's one way to do things more properly:
class A
{
private:
int myN;
public:
A( int n ): myN( n ) {}
int n() const { return myN; }
};
class B: public A
{
public:
B( int n ): A( n ) {}
};
int main()
{
B c; // And yes, that's it, all you have to do.
}
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?
Thanks for your reply, well my example was pretty bad (both code and
as example), so i will try with another:
#include <iostream>
using namespace std;
class A
{
public:
A(){n=5;}
virtual void show() = 0;
protected:
int n;
};
class B : public A
{
public:
void show(){cout << n << endl;}
};
class C : public A
{
public:
void show(){cout << n*2 << endl;}
};
int main()
{
A *c;
int class_num = 0; //user input
if(class_num == 0){
c = new B();
}else{
c = new C();
}
c->show();
delete c;
return 0;
}
Considering this example, what would be the best way if i wanted to
avoid virtual functions? of course i've reconsidered the use of
virtual functions since it may be totally unneeded optimization to
avoid them, but im just curious about this right now, and yes you are
right im not very used to C++ i mainly use it as an "extended" C.