>>> but i have read that reference is a const pointer
That is NOT true. A reference is not a const pointer. Period.
It's only because they 'point' to an object and cannot be changed to
'point' to some other object, people say its' a const pointer which is not
entirely true. References never 'point' to anything.
Reference is an *abstract concept*. an* alias *or a* 'different name for
same object'*.
A compiler may choose to implement it using a pointer or may not, it
depends on compiler.

>> What is size of reference.
Had they been simple const pointers you'd get 4-Bytes(on 32 bit
architecture) or 8-Bytes (on 64 bit architectures). But what you'll
actually get is *size of the object* itself.
In fact ISO C++ standard itself says that whether or not a reference
requires a storage is unspecified. i.e. It is compiler dependent how they
are implemented internally.
But Internal implementation mechanisms will never alter the visible
behavior which is mandated by the Standard so, what sizeof(reference) will
return will always be size of Object itself.

>>what is return by reference??
It is nothing different than a reference initialization for all practical
purposes.

Let func be a function of class Circle:
*Circle& Func(double r){*
* //Do something...*
* return *this;*
*}*
*
*
and, you call this function like: (This is how your *return by
reference*get's consumed.
*Circle &ref = Func(7.5);* // { As we know reference initialization is done
with object and not by pointers to those objects so, *rvalue should be an
Object* of class Circle NOT a pointer.}

>>>does it mean some pointer returned or it mean whole object returned??
The whole object is to be passed to the *'reference initialization'
mechanism* of the compiler. So you've to return an object itself(that's why
make sure you are returning some object that will persist after the
function call and not an object which will get destroyed with stack
unwinding of Func call.


Please don't say references are nothing but const pointers, just throw that
notion out of your head.
Points to gather:
*1. On the surface you can assume: References are just 'different names for
same object'. *
*2. While initializing them I need to pass the whole Object to the
reference initialization mechanism(which btw, is compiler dependent).*
*3. Sizeof(reference) is always the sizeof Object itself. (mandated by C++
standard)*
*4. Do references require extra storage? Maybe or maybe not. Read your
compiler docs.*

On 10 October 2012 02:30, rahul sharma <rahul23111...@gmail.com> wrote:

> Clear some more questiosn
>
> 1. What is size of reference.????
>
> 2.what is return by reference???it means we return the object itself
> instead of copying it into temp. variable and then return as in c. in c++
> we return original variable itself..then when we return by reference wat
> does that mean,,,does it mean some pointer returned or it mean whole object
> returned??
>
>
> On Wed, Oct 10, 2012 at 2:23 AM, rahul sharma <rahul23111...@gmail.com>wrote:
>
>> Got confused....cant get it......:([?]
>>
>>
>> On Wed, Oct 10, 2012 at 1:00 AM, Prem Krishna Chettri <hprem...@gmail.com
>> > wrote:
>>
>>> Well Lemme try few more hand here..
>>>
>>> Basics First Guys :-
>>>
>>>               this :-  is a hidden pointer to a class (Agree ?). So
>>> whats so special about it.. Answer is its compaction when the object of the
>>> class is being created. Why? Here it goes. As object memory allocation (I
>>> hope everyone knows) have memory structure such that the first parameter
>>> always starts with arg[1]. so why not arg[0] as array always indexes with
>>> "0"? The Answer is here.. Coz every time the object of a class is generated
>>> the Zeroth index is alwayz occupied by this "*this*" pointer. So if do
>>> you follow me up to here properly that you know the significance of this
>>> now.. Coz its object refference lies to the value of offset 0 to the base
>>> address of the class's object, giving the flexibility to express any member
>>> of the class by directly accessing via its base address and this also
>>> explains why this has to be a pointer and not a normal member variable.
>>>
>>>                Now here comes the other part of question.why we need *"
>>> ** *this"*  where *"this"* should give the base address of the object
>>> of the class we wanna refer. The Answer is partly "YES" coz as we discuss "
>>> *this" *knows almost everything about the class or rather an object of
>>> a class within a class scope  but here is the catch we are telling someone
>>> to get a bowl of rice from my private house. So how will he be able to get
>>> it? Until I tell him my house structure, which in programming language like
>>> C++ is reference.
>>>
>>>            I am saying sir, I have created a house (object) and here is
>>> the layout (referring to what I have created) so inorder to tell him about
>>> my layout I have to generate the return value which is NOT the house
>>> (object) but the reference to the house ( "pointer" pointing to what I have
>>> created ).
>>>
>>>          Now I am almost done here.. So Why  " ** this *" and not "*this
>>> *" is coz  "*this"*  gives the object directly to the the party who is
>>> calling me and the reference means a copy not the object itself whereas "
>>> ** this *"  is presenting you what you were looking for.
>>>
>>>       I hope now people are clear about all the above aspects.. I mean
>>> the very last question about returns full object or wat?? if you get all
>>> this.. U got all this.. :)
>>>
>>> Ciao,
>>> Prem
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Wed, Oct 10, 2012 at 12:23 AM, rahul sharma 
>>> <rahul23111...@gmail.com>wrote:
>>>
>>>> @saurabh....if i look from the way that i need to return a
>>>> referencei.e. i mean object...i will ryt *this for this..........i knew
>>>> this............but i have read that reference is a const pointer ....so if
>>>> i look from this prespective then do i need to return
>>>> pointer(this)..............
>>>> int * fun()//return pointer to int
>>>>
>>>> then what does return by reference mean if i return ( *this)..then what
>>>> actually returns...........full object???or pointer to object...mix
>>>> questions ...plz clear me..
>>>>
>>>>
>>>> On Tue, Oct 9, 2012 at 11:26 PM, Saurabh Kumar <srbh.ku...@gmail.com>wrote:
>>>>
>>>>> >> as we know reference is a const pointer
>>>>> That is Not quite true.
>>>>>
>>>>> >> our aim is ony to return pointer to circle
>>>>> No. our aim is to return a reference to circle.
>>>>>
>>>>> When you've to define a reference you do something like: *Circle &ref
>>>>> = c;*
>>>>> you *don't* do: *Circle &ref = &c;* Right ?
>>>>>
>>>>> Same is the case here, at the receiving end where the call was
>>>>> initiated a reference is waiting there to be initialized, so you pass the
>>>>> Object (*this) itself and NOT the pointer (this).
>>>>> [Also remember if you've a complex object, no copy constructors etc.
>>>>> are called when an object is sent for *reference receiving,* so no
>>>>> need of worries there.]
>>>>>
>>>>> References are not quite exactly same as pointers, they were
>>>>> introduced much later as a wrapper to pointers but there are some subtle
>>>>> differences between them when it comes to writing code, behaviorally, yes
>>>>> they are more or less the same.
>>>>>
>>>>> On 9 October 2012 22:54, SAMM <somnath.nit...@gmail.com> wrote:
>>>>>
>>>>>> This used for the following situation when   a=b=c=d  (Consider then
>>>>>> as the  objects of a particular class say X ).
>>>>>>
>>>>>>
>>>>>>  --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Algorithm Geeks" group.
>>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> algogeeks+unsubscr...@googlegroups.com.
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>
>>>>>
>>>>>  --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Algorithm Geeks" group.
>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> algogeeks+unsubscr...@googlegroups.com.
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>
>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Algorithm Geeks" group.
>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> algogeeks+unsubscr...@googlegroups.com.
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>
>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Algorithm Geeks" group.
>>> To post to this group, send email to algogeeks@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> algogeeks+unsubscr...@googlegroups.com.
>>> For more options, visit this group at
>>> http://groups.google.com/group/algogeeks?hl=en.
>>>
>>
>>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

<<322.png>>

Reply via email to