C++Now 2016 has ended
Please visit the C++Now website.
Back To Schedule
Tuesday, May 10 • 4:00pm - 5:30pm
Proper Inheritance (part 2 of 2)

Log in to save this to your schedule, view media, leave feedback and see who's attending!

All essential behavior of our software must be documented, and yet there are important advantages, with respect to development, verification and testing, performance, and stability, for leaving the behavior for some combinations of inputs and initial conditions undefined. What is and is not defined behavior should therefore be readily discernible from the contract, especially when creating contracts that must span classes related by inheritance. In Part I of this talk, we review components, interfaces and contracts in general, and the significance of *narrow* versus *wide* contracts in particular. In Part II, we explore _three_ kinds of inheritance: (1) *Interface* *Inheritance* resulting from pure-virtual functions, (2) *Structural* *Inheritance* resulting from non-virtual functions, and (3) *Implementation* *Inheritance* resulting from non-pure virtual functions. Proper contracts involving each of these distinct forms have different criteria that must be addressed. The three kinds of inheritance are compared, and their relative utility is explained. What's more, several common uses of inheritance that are provably improper are summarily debunked.

avatar for John Lakos

John Lakos

Software Engineer, Bloomberg
John Lakos, author of Large-Scale C++ Software Design [Addison-Wesley, 1996], serves at Bloomberg LP in New York City as a senior architect and mentor for C++ software development worldwide.  He is also an active voting member of the C++ Standards Committee’s Evolution Working... Read More →

Tuesday May 10, 2016 4:00pm - 5:30pm MDT