Title: Introduction to Effective C Programming
1Introduction to Effective C Programming
- Kwanghee Ko
- Design Laboratory
- Department of Ocean Engineering
- Massachusetts Institute of Technology
- Day 3
2General 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.
3General 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.
4General Guidelines
- Use multiple inheritance judiciously.
5Ambiguities under Multiple Inheritance
Derived d d.g() // OK d.h() // OK d.f()
// Ambiguous!!! d.Base1f() // OK d.Base2f()
// OK
Base 1 f() g()
Base 2 f() h()
Derived j() k()
6Ambiguities under Multiple Inheritance
Top int x
Left int y
Right int z
Bottom int a
7Ambiguities under Multiple Inheritance
Default inheritance mechanism -gt maintains
separate copies of the data members inherited
from all base classes.
Top int x
Left int y
Right int z
Bottom int a
8Ambiguities under Multiple Inheritance
- Case 2 (Non-virtual Base class)
Top int x
Top int x
Top int x
Top int x
Left int y
Right int z
Left int y
Right int z
Bottom int a
Bottom int a
9Ambiguities under Multiple Inheritance
- Case 2 Virtual Base Class
class Leftpublic virtual Top class
Rightpublic virtual Top
Top int x
virtual
virtual
Top int x
Left int y
Right int z
Left int y
Right int z
Bottom int a
Bottom int a
10Ambiguities under Multiple Inheritance
- Case 2 Virtual Base Class
Top int x
Inherently ambiguous!!! Ex) Bottom b b.x
-gt b.Leftx? b.Rightx?
b.Topx?
virtual
virtual
Left int y
Right int z
Bottom int a
11Ambiguities under Multiple Inheritance
- Case 2 Virtual Base Class
Top int x
- Assignment for Topx happens twice.
- Bottom-gtLeft-gtTop
- Bottom-gtRight-gtTop
virtual
virtual
Left int y
Right int z
Bottom int a
12Ambiguities under Multiple Inheritance
- Case 2 Virtual Base Class
Top int x
- Assignment for Topx happens twice.
- Bottom-gtLeft-gtTop
- Bottom-gtRight-gtTop
virtual
virtual
Left int y
Right int z
Solution???
Bottom int a
13General 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.
14General 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.