Presentation is loading. Please wait.

Presentation is loading. Please wait.

Introduction to Effective C++ Programming Kwanghee Ko Design Laboratory Department of Ocean Engineering Massachusetts Institute of Technology Day 3.

Similar presentations


Presentation on theme: "Introduction to Effective C++ Programming Kwanghee Ko Design Laboratory Department of Ocean Engineering Massachusetts Institute of Technology Day 3."— Presentation transcript:

1 Introduction to Effective C++ Programming Kwanghee Ko Design Laboratory Department of Ocean Engineering Massachusetts Institute of Technology Day 3

2 General Guidelines Avoid returning “handles” to internal data. Avoid member functions that return non- const pointers or references to members less accessible than themselves. Never return a reference to a local object or to a dereferenced pointer initialized by new with in the function (memory leakage). Postpone variable definitions as long as possible.

3 General Guidelines Public inheritance models : “isa” relation? – Ex. A bus is a vehicle? Never redefine an inherited non-virtual function. Never redefine an inherited default parameter value. Avoid cast down the inheritance hierarchy. Model “has-a” or “is-implemented-in- terms-of” through layering.

4 General Guidelines Use multiple inheritance judiciously.

5 Ambiguities under Multiple Inheritance Case 1 Base 1 f(); g(); Base 2 f(); h(); Derived j(); k(); Derived d; d.g(); // OK d.h(); // OK d.f(); // Ambiguous!!! d.Base1::f(); // OK d.Base2::f(); // OK

6 Ambiguities under Multiple Inheritance Case 2 Left int y; Right int z; Bottom int a Top int x;

7 Ambiguities under Multiple Inheritance Case 2 Left int y; Right int z; Bottom int a Default inheritance mechanism -> maintains separate copies of the data members inherited from all base classes. Top int x;

8 Ambiguities under Multiple Inheritance Case 2 (Non-virtual Base class) Left int y; Right int z; Bottom int a Top int x; Top int x; Top int x; Top int x; Left int y; Right int z; Bottom int a

9 Ambiguities under Multiple Inheritance Case 2 : Virtual Base Class Left int y; Right int z; Bottom int a Top int x; virtual class Left::public virtual Top{…} class Right::public virtual Top{…} Top int x; Left int y; Right int z; Bottom int a

10 Ambiguities under Multiple Inheritance Case 2 : Virtual Base Class Left int y; Right int z; Bottom int a Top int x; virtual Inherently ambiguous!!! Ex) Bottom b; b.x -> b.Left::x? b.Right::x? b.Top::x?

11 Ambiguities under Multiple Inheritance Case 2 : Virtual Base Class Left int y; Right int z; Bottom int a Top int x; virtual Assignment for Top::x happens twice. - Bottom->Left->Top - Bottom->Right->Top

12 Ambiguities under Multiple Inheritance Case 2 : Virtual Base Class Left int y; Right int z; Bottom int a Top int x; virtual Assignment for Top::x happens twice. - Bottom->Left->Top - Bottom->Right->Top Solution???

13 General Guidelines Use multiple inheritance judiciously. Before using virtual base classes, understand them thoroughly. – Use an experimental program to understand its behavior. If a public base class does not have a virtual destructor, no derived class should have a destructor. If a multiple inheritance hierarchy has any destructors, every base class should have a virtual destructor.

14 General Guidelines Declare a copy constructor and an assignment operator for classes with dynamically allocated memory. Prefer initialization to assignment in constructors. List members in an initialization list in the order in which they are declared. Make sure base classes have virtual destructors. Have operator= return a reference to *this. Assign to all data members in operator=. Check for assignment to self in operator=. Overloading vs. default argument.


Download ppt "Introduction to Effective C++ Programming Kwanghee Ko Design Laboratory Department of Ocean Engineering Massachusetts Institute of Technology Day 3."

Similar presentations


Ads by Google