Post #264,969
8/15/06 4:39:44 PM
8/15/06 4:47:41 PM
|

You can overload on const
class F { public: void foo() { cout << "Normal" << endl; } void foo() const { cout << "Const" << endl; } };
void func(Foo& f) { f.foo(); } void gunc(const Foo& f) { f.foo(); }
F f;
func(f); // prints 'Normal' gunc(f); // prints 'Const'
Yeah, that's easy to keep track of.
[link|http://www.blackbagops.net|Black Bag Operations Log]
[link|http://www.objectiveclips.com|Artificial Intelligence]
[link|http://www.badpage.info/seaside/html|Scrutinizer]
You can overload on const
class F { public: void foo() { cout << "Normal" << endl; } void foo() const { cout << "Const" << endl; } };
F* f = new F; const F* g = f;
f->foo() // prints 'Normal' g->foo() // prints 'Const'
[link|http://www.blackbagops.net|Black Bag Operations Log]
[link|http://www.objectiveclips.com|Artificial Intelligence]
[link|http://www.badpage.info/seaside/html|Scrutinizer]
|
Post #264,974
8/15/06 4:45:34 PM
|

Why the hell would it do / allow that?
Would anyone like to jump in and say that's not brain damaged? Anyone?
===
Purveyor of Doc Hope's [link|http://DocHope.com|fresh-baked dog biscuits and pet treats]. [link|http://DocHope.com|http://DocHope.com]
|
Post #264,976
8/15/06 4:57:05 PM
|

Bell labs has an unlimited crack budget
It has its uses. Here's one.
class G {}
class F { G _g; // private member g public: G& g() { return _g; } // if we are not const, then neither is our G const G& g() {return _g; } // if we are const, so is our G };
So the rule is, if the F is const then you can't mess with the G. But if its not, than you can mess with the G.
Notice that I have to write a bunch of boilerplate to extend the const bubble around the F to cover the G by overloading the g member on const. This is what I dislike about C++. You get this idea that the world should be surrounded by safety rails and you spend your whole life filling in the gaps to make sure that the safety rails cover as much ground as possible - all at the expense of writing code that just does something.
[link|http://www.blackbagops.net|Black Bag Operations Log]
[link|http://www.objectiveclips.com|Artificial Intelligence]
[link|http://www.badpage.info/seaside/html|Scrutinizer]
|
Post #264,983
8/15/06 5:49:16 PM
|

The easiness to keep track of is not the issue
The issue is your assertion that behavior of the function changes based on the const-ness of the object, which is just plain not true.
jb4 "So don't pay attention to the approval ratings that say 68% of Americans disapprove of the job this man is doing. I ask you this, does that not also logically mean that 68% approve of the job he's not doing? Think about it. I haven't." — Stephen Colbert, at the White House Correspondent's Dinner 29Apr06
|
Post #264,989
8/15/06 6:51:19 PM
|

Huh?
You get a different implementation of the method depending on whether the reference to the object is const or not const. So the "apparent behavior" of the function changes.
That's all I'm saying.
[link|http://www.blackbagops.net|Black Bag Operations Log]
[link|http://www.objectiveclips.com|Artificial Intelligence]
[link|http://www.badpage.info/seaside/html|Scrutinizer]
|
Post #265,048
8/16/06 10:12:37 AM
|

No...
You get the implementation you specify. Every time. No exceptions. That implementation does not change because the object is const or not. The code is the code, and it doesn't magically change because you invoked one overload vs. another.
jb4 "So don't pay attention to the approval ratings that say 68% of Americans disapprove of the job this man is doing. I ask you this, does that not also logically mean that 68% approve of the job he's not doing? Think about it. I haven't." — Stephen Colbert, at the White House Correspondent's Dinner 29Apr06
|
Post #265,054
8/16/06 11:11:53 AM
|

I think you're talking past each other...
Because to me it looks like you're both saying the same thing.
Regards,
-scott anderson
"Welcome to Rivendell, Mr. Anderson..."
|
Post #265,060
8/16/06 11:48:14 AM
|

And you specify that by....
the type of the reference to the object. Which can change. Which kind of makes it the anti-polymorphism.
But I think Scott is right. 'nuff said.
[link|http://www.blackbagops.net|Black Bag Operations Log]
[link|http://www.objectiveclips.com|Artificial Intelligence]
[link|http://www.badpage.info/seaside/html|Scrutinizer]
|
Post #265,069
8/16/06 12:32:21 PM
|

We'll leave it at that.
But it's important to be clear (and not sarcastic) when trying to inform a newbie. YMMV....
jb4 "So don't pay attention to the approval ratings that say 68% of Americans disapprove of the job this man is doing. I ask you this, does that not also logically mean that 68% approve of the job he's not doing? Think about it. I haven't." — Stephen Colbert, at the White House Correspondent's Dinner 29Apr06
|
Post #265,080
8/16/06 1:27:58 PM
|

I wasn't trying to be sarcastic
But I know of no allegedly OO language where the method implementation lookup depends on the type of the reference you hold. It runs counter to how polymorphism is supposed to work in which the object responds based on the type of the object and not the type of the reference. So in that respect, C++ is just weird in OO world (and thus, counterintuitive).
Gotta warn the newbies.
[link|http://www.blackbagops.net|Black Bag Operations Log]
[link|http://www.objectiveclips.com|Artificial Intelligence]
[link|http://www.badpage.info/seaside/html|Scrutinizer]
|
Post #265,081
8/16/06 1:35:32 PM
|

No need to specify OO in this case
So in that respect, C++ is just weird in OO world (and thus, counterintuitive). That sentence stands on it's own with 'in OO world' removed. Jay
|
Post #265,090
8/16/06 3:06:42 PM
|

What does the type of the reference have to do with anything
The type of reference to the object is effectively the type of the object. There is no difference between having a const reference to an object in C++ and having a const object.
jb4 "So don't pay attention to the approval ratings that say 68% of Americans disapprove of the job this man is doing. I ask you this, does that not also logically mean that 68% approve of the job he's not doing? Think about it. I haven't." — Stephen Colbert, at the White House Correspondent's Dinner 29Apr06
|