Informatik, Systemarchitecture, Operating Systems
Advanced C++ Topics.
Dresden, 2008
Construction and Destruction Constructors: Special Member Functions for object initialization – Same name as the class – No return type Destructors: Special Member Functions for object destruction – Name: ~Classname() – No return type – No arguments
TU Dresden, 13.10.08
Präsentationsname XYZ
Folie 2 von XYZ
Constructors (class Foo) Foo() -> Default Constructor No arguments Generated by Compiler if no other Constructors Foo(Type x) -> Conversion Constructor Is used to cast type Type to Foo (implicitly) (see keyword explicit) Foo(Foo const &o) -> Copy Constructor Always generated by Compiler if not provided (related to operator = (Foo const &o), see later) Foo(Type a, Type b, Type c) -> Normal Constructor TU Dresden, 13.10.08
Präsentationsname XYZ
Folie 3 von XYZ
Polymorphism (Advanced) Virtual Functions Support for Overriding functions in C++ Pure Virtual Functions (Abstract Function) class A { void func() = 0; };
cannot be instantiated (is abstract) Multiple Inheritance class A : public B, public C {...};
TU Dresden, 13.10.08
Präsentationsname XYZ
Folie 4 von XYZ
Polymorphism – Virtual Dtor (Advanced) Virtual deletion ...
TU Dresden, 13.10.08
Präsentationsname XYZ
Folie 5 von XYZ
Polymorphism II (Multiple Inheritance) Object cnt
Car
Boat
name()
name()
Amphi
TU Dresden, 13.10.08
Präsentationsname XYZ
Folie 6 von XYZ
Polymorphism II (Multiple Inheritance)
Amphi Car Object
TU Dresden, 13.10.08
Amphi Boat Car
Boat
Object Object
Präsentationsname XYZ
Folie 7 von XYZ
Templates – Function Templates Functions that operate on a Generic Type (e.g. T)
template< typename T > int T max(T max(int a, Ta, b)int b) { return a>b?a:b; } int a, b; int x = max(a, max(a, b); b); double a, b; double x = max<double>(a, max(a, b); b);
TU Dresden, 13.10.08
Präsentationsname XYZ
Folie 8 von XYZ
Templates – Class Templates Classes with members of Generic Types (e.g. T)
template< typename T > class List_item { List_item *_next, *_prev; void T *_data; *_data; };
TU Dresden, 13.10.08
Präsentationsname XYZ
Folie 9 von XYZ
Don't Do This... Too Much operator overloading Keep usual semantics Avoid implicit conversion operators using namespace <X> in Header Files #define ... Use enum's for constant values Use templates for functions
TU Dresden, 13.10.08
Präsentationsname XYZ
Folie 10 von XYZ