1 / 6

Classes, compilers, dependencies

Classes, compilers, dependencies. #include <string> #include “day.h” typedef string TimeRange; class ostream; class Appointment { public: TimeRange duration(); void print(ostream & output); private: Day myDay; why use class ostream instead of #include <stream.h>

ellard
Télécharger la présentation

Classes, compilers, dependencies

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Classes, compilers, dependencies #include <string> #include “day.h” typedef string TimeRange; class ostream; class Appointment{ public: TimeRange duration(); void print(ostream & output); private: Day myDay; • why use class ostream instead of #include <stream.h> • what is a typedef and how is it used? • make depend for Appointment/ostream? • changes to Day force recompile for appointment clients?

  2. .h guidelines, preprocessor in action • minimize #includes in every .h file • avoid circular dependencies • avoid re-compile by minimizing dependencies • class Foo in foo.h, class Bar in bar.h, client foobar.cpp #ifndef _FOO_H #ifndef _BAR_H #define _FOO_H #define _BAR_H #include “bar.h” #include “foo.h” class Foo class Bar { { Bar getBar(); Foo getFoo(); // from foo.cpp #include “bar.h” #include “foo.h” void Foo::doStuff(const Bar & b)... • Avoid #includes, use forward references, sometimes you must do this as shown above (even if you don’t want to)

  3. #include “foo.h” • will be needed in .cpp file, e.g., foo.cpp and bar.cpp • using pointers and references in .h files minimizes dependencies • minimize recompiles when .h changes • loose coupling: avoid implementation dependencies when possible • avoid letting implementation leek into public view • what about private section? • opaque pointer: FooImpl * myImpl; • implementation of FooImpl is hidden, class can be implemented in foo.cpp (handle-body idiom) • factory: inheritance hierarchy, ABC

  4. Microsoft question, 108 question • Write atoi, write itoa, which is harder? • Questions? Issues? Problems? int atoi(const char * sp); char * itoa(int num); string itoa(int num); string uitoa(unsigned int num); // what’s the difference? • Difference between const char * p and char * const p • one is a pointer to a constant character • one is a constant pointer to a character

  5. What’s hard about itoa (or atoi)? • What’s the naïve way of coding itoa? • Performance implications? • Alternatives? • What does the standard do? • What’s the naïve way of coding atoi? • Where can problems happen? • What are choices for dealing with them? • What does the standard do? • What will you do?

  6. What about ints and unsigned ints? • What are the largest and smallest integer values? • Where defined? What is standard? What is common? • Typically we have fabs(INT_MIN) > fabs(INT_MAX) • Typically –INT_MIN is negative • What does this depend on? Do we need to be aware of this? • Two’s complement is nearly universal • Unsigned values are your friends int x = INT_MIN; x = -x; unsigned int y = -x;

More Related