By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,227 Members | 1,176 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,227 IT Pros & Developers. It's quick & easy.

Virtual Function Problems

P: n/a
Hi,

Im having a few problems with virtual functions (Im using the Visual C++
environment by the way). I have a base class with three virtual functions
and a derived class with a single new virtual function plus redefinitions of
the three inherited virtual functions.

Following is a simplified code fragment to illustrate my code and my
problem:

class cBase {

public:
virtual void f1() {code}
virtual void f2() {code}
virtual void f3() {code}
};

class cDerived : public cBase {

public:

void f1() {code}
void f2() {code}
void f3() {code}
virtual void f4() {code}

void func(); // some class member function
};

void cDerived::func() {

// If func() is called by a cDerived object then the cDerived definitions if
f1,f2 and f3
// should be invoked
f1();
f2();
f3();

// The screwed up thing here is that I have only one definition of f4() it's
simply not
// being called
f4(); // Does nothing when invoked with cDerived object -- must use
cDerived::f4();

}

If I say:

cDerived g_der;

g_der.func(); // cBase::f1(), cBase::f2(), cBase::f3() are invoked in
func() ... f4() is
// not invoked at all!

If I say:

cDerived *gp_der = new cDerived;

//Everything initialized properly

gp_der->func(); // compiles but cause program to crash because of f4()
gp_der->f4(); // compiles but causes crash .. Ive debugged my code to
determine
// these errors
//////////////////////////////

Now I should mention a few things. I am calling all the functions from a
cDerived object directly (Ex. cDerived g_der; g_der.func();), I am not
using a pointer to the object. Furthermore, when I changed my cDerived
object into a pointer and assigned it memory my program crashed when I
called: g_der->f4();. I am getting no errors, everything compiles properly
the functions are simply not being invoked or the program crashes as I just
mentioned. I even tried using the "this" pointer to invoke the virtual
functions within func() and nothing happened. I should mention that when I
call the virtual functions from my cDerived object directly the functions
are invoked properly. In other words,

cDerived g_der;

g_der.f1(); // calls cDerived::f1() .. good
g_der.f2(); // calls cDerived::f2() .. good
g_der.f3(); // calls cDerived::f3() .. good
g_der.f4(); // calls cDerived::f4() .. good
I am also referencing a book called the C++ Primer by Stanley Lippman and I
cant find any rules that I may be breaking, I read about vitual functions
thoroughly. I must be doing something wrong, if anyone can shed any light
on this I would appreciate it so much.

Ryan
Jul 19 '05 #1
Share this Question
Share on Google+
5 Replies


P: n/a
"Ryan Faulkner" <ya******@hotmail.com> wrote...
Im having a few problems with virtual functions [...]

Following is a simplified code fragment [...]


Post _real_ code. Simplify it as much as necessary to still
keep it compilable and producing the described error, then
post.

Victor
Jul 19 '05 #2

P: n/a

"Victor Bazarov" <v.********@attAbi.com> wrote in message
news:vi************@corp.supernews.com...
"Ryan Faulkner" <ya******@hotmail.com> wrote...
Im having a few problems with virtual functions [...]

Following is a simplified code fragment [...]


Post _real_ code. Simplify it as much as necessary to still
keep it compilable and producing the described error, then
post.

Victor


The code is complete and should compile other than the fact that I put the
word "code" inside function definitions that are not relevant to the error.
Did you check out the code?

Ryan
Jul 19 '05 #3

P: n/a
"Ryan Faulkner" <ya******@hotmail.com> wrote...

"Victor Bazarov" <v.********@attAbi.com> wrote in message
news:vi************@corp.supernews.com...
"Ryan Faulkner" <ya******@hotmail.com> wrote...
Im having a few problems with virtual functions [...]

Following is a simplified code fragment [...]
Post _real_ code. Simplify it as much as necessary to still
keep it compilable and producing the described error, then
post.

Victor


The code is complete and should compile other than the fact that I put the
word "code" inside function definitions that are not relevant to the

error. Did you check out the code?


If I have to change ONE SYMBOL after copying and pasting your code
into the text editor before I run a compiler, your code is NOT
_complete_ or _compilable_.

Now, this is complete and compilable, and it works as expected
(and I say this because I tested it):
---------------------------------------------------------
class B {
public:
virtual void f1() {}
virtual void f2() {}
virtual void f3() {}
};
#include <iostream>
class D : public B {
public:
void f1() { std::cout << "D::f1\n"; }
void f2() { std::cout << "D::f2\n"; }
void f3() { std::cout << "D::f3\n"; }
virtual void f4() { std::cout << "D::f4\n"; }
void func();
};

void D::func() {
f1();
f2();
f3();
f4();
}

int main() {
D d;
d.func();
}
---------------------------------------------------------

Therefore one only can conclude that the crash you describe only
happens because of "code" you omitted. That's why I said, post
the complete code.

Victor
Jul 19 '05 #4

P: n/a

"Ryan Faulkner" <ya******@hotmail.com> wrote in message
news:bg**********@news1.mountaincable.net...

"Victor Bazarov" <v.********@attAbi.com> wrote in message
news:vi************@corp.supernews.com...
"Ryan Faulkner" <ya******@hotmail.com> wrote...
Im having a few problems with virtual functions [...]

Following is a simplified code fragment [...]
Post _real_ code. Simplify it as much as necessary to still
keep it compilable and producing the described error, then
post.

Victor


The code is complete and should compile other than the fact that I put the
word "code" inside function definitions that are not relevant to the

error. Did you check out the code?

Ryan


Well there is no main function for a start. There are lots of statements
outside of any function, and the code appears to be interspersed with text.

People are lazy, there just like to cut and paste the code you've posted and
compile it.

Also posters make mistakes. In many, many posts containing code, the newbie
leaves out the vital code, because they thought it was irrelevant. Even
though they are a newbie, and the have a problem they can't solve, they
still think they know what is releveant and what is not.

Post complete, compilable code, its not that hard and you will get an answer
in minutes.

john
Jul 19 '05 #5

P: n/a

"Ryan Faulkner" <ya******@hotmail.com> wrote in message
news:bg**********@news1.mountaincable.net...
My apologies I didnt realize you actually wanted to compile it. Since I
wasnt getting errors compiling in the first place I was just trying to
communicate the concepts involved with my code (the code itself was very
extensive) and trying to find out if I had the wrong idea somewhere about
how virtual functions were used. My fault.


I don't think you have the wrong idea about virtual functions. You have a
bug in your code. That bug is somewhere in the code you haven't posted.

john
Jul 19 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.