Re: base classes and inheritance problem
On Mar 15, 11:32 pm, "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 leavi=
ng 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 jou=
rney
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.
}
In the above program, "B" objects cannot be default-constructed, so
"c"'s declaration will not compile. Possible solutions include:
initializing "c" with an int value:
B c(-3);
or, providing a default argument to B's constructor:
B( int n = 5): A( n ) {}
Greg