[ Team LiB ] Previous Section Next Section

   
•  Table of Contents
C++ Gotchas: Avoiding Common Problems in Coding and Design
By Stephen C. Dewhurst
   
Publisher : Addison Wesley
Pub Date : November 29, 2002
ISBN : 0-321-12518-5
Pages : 352


    Copyright
    Addison-Wesley Professional Computing Series
    Preface
    Acknowledgments
    Chapter 1.  Basics
      Gotcha #1: Excessive Commenting
      Gotcha #2: Magic Numbers
      Gotcha #3: Global Variables
      Gotcha #4: Failure to Distinguish Overloading from Default Initialization
      Gotcha #5: Misunderstanding References
      Gotcha #6: Misunderstanding Const
      Gotcha #7: Ignorance of Base Language Subtleties
      Gotcha #8: Failure to Distinguish Access and Visibility
      Gotcha #9: Using Bad Language
      Gotcha #10: Ignorance of Idiom
      Gotcha #11: Unnecessary Cleverness
      Gotcha #12: Adolescent Behavior
   
    Chapter 2.  Syntax
      Gotcha #13: Array/Initializer Confusion
      Gotcha #14: Evaluation Order Indecision
      Gotcha #15: Precedence Problems
      Gotcha #16: for Statement Debacle
      Gotcha #17: Maximal Munch Problems
      Gotcha #18: Creative Declaration-Specifier Ordering
      Gotcha #19: Function/Object Ambiguity
      Gotcha #20: Migrating Type-Qualifiers
      Gotcha #21: Self-Initialization
      Gotcha #22: Static and Extern Types
      Gotcha #23: Operator Function Lookup Anomaly
      Gotcha #24: Operator -> Subtleties
   
    Chapter 3.  The Preprocessor
      Gotcha #25: #define Literals
      Gotcha #26: #define Pseudofunctions
      Gotcha #27: Overuse of #if
      Gotcha #28: Side Effects in Assertions
   
    Chapter 4.  Conversions
      Gotcha #29: Converting through void *
      Gotcha #30: Slicing
      Gotcha #31: Misunderstanding Pointer-to-Const Conversion
      Gotcha #32: Misunderstanding Pointer-to-Pointer-to-Const Conversion
      Gotcha #33: Misunderstanding Pointer-to-Pointer-to-Base Conversion
      Gotcha #34: Pointer-to-Multidimensional-Array Problems
      Gotcha #35: Unchecked Downcasting
      Gotcha #36: Misusing Conversion Operators
      Gotcha #37: Unintended Constructor Conversion
      Gotcha #38: Casting under Multiple Inheritance
      Gotcha #39: Casting Incomplete Types
      Gotcha #40: Old-Style Casts
      Gotcha #41: Static Casts
      Gotcha #42: Temporary Initialization of Formal Arguments
      Gotcha #43: Temporary Lifetime
      Gotcha #44: References and Temporaries
      Gotcha #45: Ambiguity Failure of dynamic_cast
      Gotcha #46: Misunderstanding Contravariance
   
    Chapter 5.  Initialization
      Gotcha #47: Assignment/Initialization Confusion
      Gotcha #48: Improperly Scoped Variables
      Gotcha #49: Failure to Appreciate C++'s Fixation on Copy Operations
      Gotcha #50: Bitwise Copy of Class Objects
      Gotcha #51: Confusing Initialization and Assignment in Constructors
      Gotcha #52: Inconsistent Ordering of the Member Initialization List
      Gotcha #53: Virtual Base Default Initialization
      Gotcha #54: Copy Constructor Base Initialization
      Gotcha #55: Runtime Static Initialization Order
      Gotcha #56: Direct versus Copy Initialization
      Gotcha #57: Direct Argument Initialization
      Gotcha #58: Ignorance of the Return Value Optimizations
      Gotcha #59: Initializing a Static Member in a Constructor
   
    Chapter 6.  Memory and Resource Management
      Gotcha #60: Failure to Distinguish Scalar and Array Allocation
      Gotcha #61: Checking for Allocation Failure
      Gotcha #62: Replacing Global New and Delete
      Gotcha #63: Confusing Scope and Activation of Member new and delete
      Gotcha #64: Throwing String Literals
      Gotcha #65: Improper Exception Mechanics
      Gotcha #66: Abusing Local Addresses
      Gotcha #67: Failure to Employ Resource Acquisition Is Initialization
      Gotcha #68: Improper Use of auto_ptr
   
    Chapter 7.  Polymorphism
      Gotcha #69: Type Codes
      Gotcha #70: Nonvirtual Base Class Destructor
      Gotcha #71: Hiding Nonvirtual Functions
      Gotcha #72: Making Template Methods Too Flexible
      Gotcha #73: Overloading Virtual Functions
      Gotcha #74: Virtual Functions with Default Argument Initializers
      Gotcha #75: Calling Virtual Functions in Constructors and Destructors
      Gotcha #76: Virtual Assignment
      Gotcha #77: Failure to Distinguish among Overloading, Overriding, and Hiding
      Gotcha #78: Failure to Grok Virtual Functions and Overriding
      Gotcha #79: Dominance Issues
   
    Chapter 8.  Class Design
      Gotcha #80: Get/Set Interfaces
      Gotcha #81: Const and Reference Data Members
      Gotcha #82: Not Understanding the Meaning of Const Member Functions
      Gotcha #83: Failure to Distinguish Aggregation and Acquaintance
      Gotcha #84: Improper Operator Overloading
      Gotcha #85: Precedence and Overloading
      Gotcha #86: Friend versus Member Operators
      Gotcha #87: Problems with Increment and Decrement
      Gotcha #88: Misunderstanding Templated Copy Operations
   
    Chapter 9.  Hierarchy Design
      Gotcha #89: Arrays of Class Objects
      Gotcha #90: Improper Container Substitutability
      Gotcha #91: Failure to Understand Protected Access
      Gotcha #92: Public Inheritance for Code Reuse
      Gotcha #93: Concrete Public Base Classes
      Gotcha #94: Failure to Employ Degenerate Hierarchies
      Gotcha #95: Overuse of Inheritance
      Gotcha #96: Type-Based Control Structures
      Gotcha #97: Cosmic Hierarchies
      Gotcha #98: Asking Personal Questions of an Object
      Gotcha #99: Capability Queries
   
    Bibliography
[ Team LiB ] Previous Section Next Section