Const memebr function behaviour.

R

Rusty

Can somebody can explain the following behaviour. I have a small code
as below:

class B
{
public:
int b;
B () { b = 0; };
void foo2 (int h) { b = h; } // non-const function
};

class A
{
public:
int a;
A () { cout << "Inside default constructor" << endl; b = new B
();}

B* b;

void bar () const { b->foo2 (3); } // problem. how can this
compile ?
};


void foo (const A* a)
{
a->bar ();
}

int
main (int argc, char** argv)
{
A a1;
foo (&a1);
}

My concern is how could this code compile when in bar () function of
class A, I am calling non const function on pointer b ?

If instead of pointer, b is an object of type B, I get correct error
saying that inside const member function of class A, I cannot call non
const member function of B.

Thanks in advance,

-Aseem.
 
R

Rolf Magnus

Rusty said:
Can somebody can explain the following behaviour. I have a small code
as below:

class B
{
public:
int b;
B () { b = 0; };
void foo2 (int h) { b = h; } // non-const function
};

class A
{
public:
int a;
A () { cout << "Inside default constructor" << endl; b = new B
();}

B* b;

void bar () const { b->foo2 (3); } // problem. how can this
compile ?
};


void foo (const A* a)
{
a->bar ();
}

int
main (int argc, char** argv)
{
A a1;
foo (&a1);
}

My concern is how could this code compile when in bar () function of
class A, I am calling non const function on pointer b ?

Why would that be a problem?
If instead of pointer, b is an object of type B, I get correct error
saying that inside const member function of class A, I cannot call non
const member function of B.

But you have a pointer. The constness of a pointer isn't related to the
constness of the object it points to.
 
?

=?iso-8859-1?q?Erik_Wikstr=F6m?=

Can somebody can explain the following behaviour. I have a small code
as below:

class B
{
public:
int b;
B () { b = 0; };
void foo2 (int h) { b = h; } // non-const function

};

class A
{
public:
int a;
A () { cout << "Inside default constructor" << endl; b = new B
();}

B* b;

void bar () const { b->foo2 (3); } // problem. how can this
compile ?

};

void foo (const A* a)
{
a->bar ();

}

int
main (int argc, char** argv)
{
A a1;
foo (&a1);

}

My concern is how could this code compile when in bar () function of
class A, I am calling non const function on pointer b ?

If instead of pointer, b is an object of type B, I get correct error
saying that inside const member function of class A, I cannot call non
const member function of B.

If you have a B member and calls on the function that instance will be
const (since the function is const). However when you have a pointer
and call the function the *pointer* becomes const and not the object
it points to.
 
P

*PaN!*

B* b;
void bar () const { b->foo2 (3); } // problem. how can thiscompile ?

'b = 0;' would be illegal there.
Because you are not changing the pointer, but the pointed object, which is
not part of your object (the pointer is).

--*PaN!*
 
S

Salt_Peter

Can somebody can explain the following behaviour. I have a small code
as below:

class B
{
public:
int b;
B () { b = 0; };
void foo2 (int h) { b = h; } // non-const function

};

class A
{
public:
int a;
A () { cout << "Inside default constructor" << endl; b = new B
();}

B* b;

void bar () const { b->foo2 (3); } // problem. how can this
compile ?

};

void foo (const A* a)
{
a->bar ();

}

int
main (int argc, char** argv)
{
A a1;
foo (&a1);

}

My concern is how could this code compile when in bar () function of
class A, I am calling non const function on pointer b ?

If instead of pointer, b is an object of type B, I get correct error
saying that inside const member function of class A, I cannot call non
const member function of B.

Thanks in advance,

-Aseem.

The member function bar () const is not modifying the instance of
class A in any way.
I see a new B in A's ctor but no corresponding deallocation.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top