objects and nesting and pointers oh my if we have a
play

Objects and nesting and pointers, oh my! If we have a pointer - PowerPoint PPT Presentation

Objects and nesting and pointers, oh my! If we have a pointer variable ptr , we access the thing that a pointer points to with the syntax *ptr To access a field or method of a class through an object variable, use the syntax


  1. Objects and nesting and pointers, oh my!

  2. • If we have a pointer variable ptr , we access the thing that a pointer points to with the syntax *ptr • To access a field or method of a class through an object variable, use the syntax variable.field OR variable.method()

  3. • So what if ptr points to an object? • string s = "Hello"; string *sptr = &s; string *sptr2 = new string("Goodbye"); • We access the string through the pointer using the same syntax: cout << s; // regular access cout << *sptr; // through pointer cout << *sptr2; // through pointer

  4. • Problem occurs if we want to get the length of the string through the pointer: • string s = "Hello"; string *sptr = &s; cout << *sptr.length(); // error • Reason: the dot operator has higher precedence than the dereference (*) operator, so C++ interprets this as: cout << *(sptr.length());

  5. • Two ways to fix this. • Method 1: Use parentheses to change order of operations: • string s = "Hello"; string *sptr = &s; cout << (*sptr).length(); // OK • Method 2: Use the arrow operator, which combines the dereference * and dot operator into one: • cout << sptr->length(); // OK • Method 2 is much more common.

  6. Rule • To access a field or method of a class through an object variable , use the syntax variable.field OR variable.method() • To access a field or method of a class through a pointer to an object , use the syntax ptr->field OR ptr->method();

  7. class thingy { public : int x; void f(); };

  8. class thingy { thingy thing; public : cout << thing.x; int x; thing.f(); void f(); }; thingy *thing_ptr = &thing; cout << thing_ptr->x; thing_ptr->f(); thingy *tptr2 = new thing; cout << tptr2->x; tptr2->f();

  9. class thingy { vector<thingy> tvec; public : // add things to tvec int x; cout << tvec[0].x; void f(); tvec[0].f(); }; vector<thingy*> ptrvec; // add things to ptrvec cout << ptrvec[0]->x; ptrvec[0]->f();

  10. class thingy { public : int x; void f(); }; class doohickey { public : int y; void g(); thingy t; thingy *tptr; }

  11. class thingy { doohickey doohick; public : cout << doohick.y; int x; doohick.g(); void f(); cout << doohick.t.x; }; doohick.t.f(); class doohickey { doohickey *dptr = &doohick; public : cout << dptr->y; int y; dptr->g(); void g(); thingy t; cout << dptr->t.x; thingy *tptr; dptr->t.f(); }

  12. class thingy { doohickey doohick; public : doohickey *dptr = &doohick; int x; void f(); doohick.tptr = new thingy; }; class doohickey cout << doohick.tptr->x; { doohick.tptr->f(); public : int y; cout << dptr->tptr->x; void g(); thingy t; dptr->tptr->f(); thingy *tptr; }

  13. class thingy { vector<doohickey> dvec; public : vector<doohickey*> dptrvec; int x; // add stuff to vectors void f(); }; cout << dvec[0].t.x; class doohickey cout << dvec[0].tptr->x; { cout << dvecptr[0]->t.x; public : cout << dptrvec[0]->tptr->x; int y; void g(); thingy t; thingy *tptr; }

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend