Solved

a reference to an object ? (C++)

Posted on 2003-10-26
7
321 Views
Last Modified: 2010-04-17
To C++ expert :

   Is it legal to have a reference to an object ? The following code won't compile, and I don't understand
why:
---------------------------
class A{
  int i ;
 public:
   A(int x) : i(x){}
} ;

int main()
{
  A &a_ref = new A(1);
  return 0 ;
}
--------------------------------
 it works when I change "A &a_ref" to
 "const A &a_ref". But I don't understand why can't
  we have a reference to an object .... ?
--------------------------------
similarly,

string a("meow") ;
char *c_ptr = a.c_str() ;

doesn't compile either ...... I need to change
"char *c_ptr" to "const *c_ptr" as well ? why is that ??
-----------------
 Thanks a lot !!!
0
Comment
Question by:meow00
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
7 Comments
 
LVL 1

Assisted Solution

by:marcin1
marcin1 earned 110 total points
ID: 9624503
First example does not work because new operator returns a pointer
to the object, so it should look like this:

A *a_poiner = new A(1);

Now you can access public methods and fields using ->

a_point->i = 5;
(if "i" is public of course)

Or you can dereference the pointer returned by new, using the star

A &a_ref = *(new A(1));

Dereferencing means getting the underlying object from the pointer.

I have no idea why it works when you change "A &a_ref" to
"const A &a_ref", it doesn't work on Borland C++ Builder 6

As for the second part, I don't know which library you use, but
I think the c_str() method of string class returns "const * char",
which is not the same as "char *".

"c_str()" is desinged for reading purposes only, that is why it returns
"const char*" - to prevent from changing the string, what could be
catastrophic in the "string" object.

0
 
LVL 1

Expert Comment

by:marcin1
ID: 9624506
I meant :

A *a_point = new A(1);

Sorry
0
 
LVL 1

Author Comment

by:meow00
ID: 9624645
Hi,
   I know this is a silly question ... but I really don't understand :
 if "new" operator returns a pointer to an object, why we can
 do :
   A a_obj = new A ;
 does the assignment operator " = " implicit do something there ?
 
 Thanks a lot !!!

meow.....
 
0
Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

 
LVL 1

Assisted Solution

by:jcwlc
jcwlc earned 40 total points
ID: 9624763
References were created to make life easier for people who were confused by pointers!

It allows you to use . (DOT) notation instead of -> (POINTER) notation. However, unlike a pointer in C++, you cannot change it's value. Hence, the compiler forces you declare it as constant. You cannot have a reference to a reference, like you can have a pointer to a pointer...

I suggest you stick to one or the other when learning C++... Generally I only use references when passing/returning pointers to objects...

eg:

//returns a copy string object...
CString & func(CString &s)
{
   CString x = new CString(s);
   return x;
}


0
 
LVL 1

Author Comment

by:meow00
ID: 9624822
Sorry .....
but
---------------------------
 string& func(string &s)
{
   string x = new string(s);
   return x;
}
-----------------------
does not compile for me ......
I got error message :
--------------------------
conversion from `string *' to non-scalar type `basic_string<char,strin
g_char_traits<char>,__default_alloc_template<false,0> >' requested
test.C:6: warning: reference to local variable `x' returned
-----------------------------
what does it mean .......
0
 
LVL 1

Expert Comment

by:jcwlc
ID: 9625008
Sorry,

string(s) should be CString(s)

regards,
0
 
LVL 1

Accepted Solution

by:
jcwlc earned 40 total points
ID: 9625317

const CString& func(CString &s)
{
    static CString x;

    x = s;

   return x;
}

CString y("hhh");
CString x = func(y);
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Although it can be difficult to imagine, someday your child will have a career of his or her own. He or she will likely start a family, buy a home and start having their own children. So, while being a kid is still extremely important, it’s also …
This article will inform Clients about common and important expectations from the freelancers (Experts) who are looking at your Gig.
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…
Simple Linear Regression

635 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question