C++ Crash Course: a fast-Paced Introduction



Yüklə 7 Mb.
Pdf görüntüsü
səhifə8/71
tarix20.09.2023
ölçüsü7 Mb.
#145939
1   ...   4   5   6   7   8   9   10   11   ...   71
C Crash Course A Fast-Paced Introduction by Josh Lospinoso


RUNTIME POLYMORPHISM 
133
Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
A Motivating Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Adding New Loggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Object Composition and Implementation Inheritance . . . . . . . . . . . . . . . . . . 137
Defining Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Base Class Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Member Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
virtual Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Pure-Virtual Classes and Virtual Destructors . . . . . . . . . . . . . . . . . . . . . . . . . 142
Implementing Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Using Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Updating the Bank Logger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Constructor Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Property Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Choosing Constructor or Property Injection . . . . . . . . . . . . . . . . . . . . . . . . 146
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

COMPILE-TIME POLYMORPHISM 
149
Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Declaring Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Template Class Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Template Function Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Instantiating Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Named Conversion Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
const_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
static_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
reinterpret_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
narrow_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
mean: A Template Function Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Genericizing mean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Template Type Deduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
SimpleUniquePointer: A Template Class Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Type Checking in Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161


Contents in Detail
xv
Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Defining a Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Type Traits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Building Concepts from Requires Expressions . . . . . . . . . . . . . . . . . . . . . . . 167
Using Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Ad Hoc Requires Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
static_assert: The Preconcepts Stopgap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Non-Type Template Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Variadic Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Advanced Template Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Template Specialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Name Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Type Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Template Metaprogramming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Template Source Code Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Polymorphism at Runtime vs . Compile Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

Yüklə 7 Mb.

Dostları ilə paylaş:
1   ...   4   5   6   7   8   9   10   11   ...   71




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin