383
Contents at a glance Introduction xix Part I INTRODUCING MICROSOFT VISUAL C# AND MICROSOFT VISUAL STUDIO 2013 Chapter 1 Welcome to C# 3 Chapter 2 Working with variables, operators, and expressions 39 Chapter 3 Writing methods and applying scope 65 Chapter 4 Using decision statements 93 Chapter 5 Using compound assignment and iteration statements 113 Chapter 6 Managing errors and exceptions 135 Part II UNDERSTANDING THE C# OBJECT MODEL Chapter 7 Creating and managing classes and objects 161 Chapter 8 Understanding values and references 183 Chapter 9 Creating value types with enumerations and structures 207 Chapter 10 Using arrays 227 Chapter 11 Understanding parameter arrays 251 Chapter 12 Working with inheritance 263 Chapter 13 Creating interfaces and defining abstract classes 287 Chapter 14 Using garbage collection and resource management 317 Part III DEFINING EXTENSIBLE TYPES WITH C# Chapter 15 Implementing properties to access fields 341 Chapter 16 Using indexers 363 Chapter 17 Introducing generics 381 Chapter 18 Using collections 411 Chapter 19 Enumerating collections 435 Chapter 20 Decoupling application logic and handling events 451 Chapter 21 Querying in-memory data by using query expressions 485 Chapter 22 Operator overloading 511 Chapter 16 Using indexers 363 Chapter 17 Introducing generics 381 Chapter 18 Using collections 411 Chapter 19 Enumerating collections 435 Chapter 20 Decoupling application logic and handling events 451 Chapter 21 Querying in-memory data by using query expressions 485 Chapter 22 Operator overloading 511 iv Contents at a glance Part IV BUILDING PROFESSIONAL WINDOWS 8.1 APPLICATIONS WITH C# Chapter 23 Improving throughput by using tasks 537 Chapter 24 Improving response time by performing asynchronous operations 581 Chapter 25 Implementing the user interface for a Windows Store app 623 Chapter 26 Displaying and searching for data in a Windows Store app 673 Chapter 27 Accessing a remote database from a Windows Store app 721 Index 763 v Contents Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Part I INTRODUCING MICROSOFT VISUAL C# AND MICROSOFT VISUAL STUDIO 2013 Chapter 1 Welcome to C# 3 Beginning programming with the Visual Studio 2013 environment. . . . . . 3 Writing your first program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Using namespaces. . . . . . . .

Naslov 6

  • Upload
    salasko

  • View
    224

  • Download
    1

Embed Size (px)

DESCRIPTION

sadrzaji razni

Citation preview

Contents at a glance Introduction xix Part I INTRODUCING MICROSOFT VISUAL C# AND MICROSOFT VISUAL STUDIO 2013 Chapter 1 Welcome to C# 3 Chapter 2 Working with variables, operators, and expressions 39 Chapter 3 Writing methods and applying scope 65 Chapter 4 Using decision statements 93 Chapter 5 Using compound assignment and iteration statements 113 Chapter 6 Managing errors and exceptions 135 Part II UNDERSTANDING THE C# OBJECT MODEL Chapter 7 Creating and managing classes and objects 161 Chapter 8 Understanding values and references 183 Chapter 9 Creating value types with enumerations and structures 207 Chapter 10 Using arrays 227 Chapter 11 Understanding parameter arrays 251 Chapter 12 Working with inheritance 263 Chapter 13 Creating interfaces and defining abstract classes 287 Chapter 14 Using garbage collection and resource management 317 Part III DEFINING EXTENSIBLE TYPES WITH C# Chapter 15 Implementing properties to access fields 341 Chapter 16 Using indexers 363 Chapter 17 Introducing generics 381 Chapter 18 Using collections 411 Chapter 19 Enumerating collections 435 Chapter 20 Decoupling application logic and handling events 451 Chapter 21 Querying in-memory data by using query expressions 485 Chapter 22 Operator overloading 511

Chapter 16 Using indexers 363 Chapter 17 Introducing generics 381 Chapter 18 Using collections 411 Chapter 19 Enumerating collections 435 Chapter 20 Decoupling application logic and handling events 451 Chapter 21 Querying in-memory data by using query expressions 485 Chapter 22 Operator overloading 511 iv Contents at a glance Part IV BUILDING PROFESSIONAL WINDOWS 8.1 APPLICATIONS WITH C# Chapter 23 Improving throughput by using tasks 537 Chapter 24 Improving response time by performing asynchronous operations 581 Chapter 25 Implementing the user interface for a Windows Store app 623 Chapter 26 Displaying and searching for data in a Windows Store app 673 Chapter 27 Accessing a remote database from a Windows Store app 721 Index 763 v Contents Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Part I INTRODUCING MICROSOFT VISUAL C# AND MICROSOFT VISUAL STUDIO 2013 Chapter 1 Welcome to C# 3 Beginning programming with the Visual Studio 2013 environment. . . . . . 3 Writing your first program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Using namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Creating a graphical application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Examining the Windows Store app. . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Examining the WPF application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Adding code to the graphical application. . . . . . . . . . . . . . . . . . . . . . 34 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Chapter 2 Working with variables, operators, and expressions 39 Understanding statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Using identifiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Identifying keywords. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Using variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Naming variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Declaring variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Working with primitive data types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Unassigned local variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Displaying primitive data type values. . . . . . . . . . . . . . . . . . . . . . . . . 44 What do you think of this book? We want to hear from you! Microsoft is interested in hearing your feedback so we can continually improve our books and learning resources for you. To participate in a brief online survey, please visit: www.microsoft.com/learning/booksurvey/ vi Contents Using arithmetic

operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Operators and types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Examining arithmetic operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Controlling precedence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Using associativity to evaluate expressions. . . . . . . . . . . . . . . . . . . . . 60 Associativity and the assignment operator. . . . . . . . . . . . . . . . . . . . . 60 Incrementing and decrementing variables. . . . . . . . . . . . . . . . . . . . . . . . . . .61 Prefix and postfix. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Declaring implicitly typed local variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Chapter 3 Writing methods and applying scope 65 Creating methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Declaring a method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Returning data from a method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Calling methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Applying scope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Defining local scope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Defining class scope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Overloading methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Writing methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Using optional parameters and named arguments. . . . . . . . . . . . . . . . . . . 83 Defining optional parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Passing named arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Resolving ambiguities with optional parameters and named arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Chapter 4 Using decision statements 93 Declaring Boolean variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Using Boolean operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Contents vii Understanding equality and relational operators. . . . . . . . . . . . . . . 94 Understanding conditional logical operators. . . . . . . . . . . . . . . . . . . 95 Short-circuiting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Summarizing operator precedence and associativity. . . . . . . . . . . . 96 Using if statements to make decisions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Understanding if statement syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Using blocks to group statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Cascading if statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Using switch statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Understanding switch statement syntax. . . . . . . . . . . . . . . . . . . . . . 106 Following the switch statement rules. . . . . . . . . . . . . . . . . . . . . . . . . 107 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Chapter 5 Using compound assignment and iteration statements 113 Using compound assignment operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Writing while statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Writing for Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Understanding for statement scope. . . . . . . . . . . . . . . . . . . . . . . . . . 123 Writing do statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Chapter 6 Managing errors and exceptions 135 Coping with errors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Trying code and catching exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Unhandled Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Using multiple catch handlers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Catching multiple

exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Propagating exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Using checked and unchecked integer arithmetic. . . . . . . . . . . . . . . . . . . 147 Writing checked statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 viii Contents Writing checked expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Throwing exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Using a finally block. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Part II UNDERSTANDING THE C# OBJECT MODEL Chapter 7 Creating and managing classes and objects 161 Understanding classification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 The purpose of encapsulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Defining and using a class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Controlling accessibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Working with constructors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Overloading constructors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Understanding static methods and data. . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Creating a shared field. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Creating a static field by using the const keyword. . . . . . . . . . . . . . 177 Understanding static classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Anonymous classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Chapter 8 Understanding values and references 183 Copying value type variables and classes. . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Understanding null values and nullable types. . . . . . . . . . . . . . . . . . . . . . . 189 Using nullable types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Understanding the properties of nullable types. . . . . . . . . . . . . . . 191 Using ref and out parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Creating ref parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Creating out parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 How computer memory is organized. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Using the stack and the heap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Contents ix The System.Object class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Boxing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Unboxing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Casting data safely. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 The is operator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 The as operator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Chapter 9 Creating value types with enumerations and structures 207 Working with enumerations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Declaring an enumeration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Using an enumeration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Choosing enumeration literal values. . . . . . . . . . . . . . . . . . . . . . . . . 209 Choosing an enumeration’s underlying type. . . . . . . . . . . . . . . . . . 210 Working with structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Declaring a structure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Understanding structure and class differences. . . . . . . . . . . . . . . . 215 Declaring structure variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Understanding structure initialization. . . . . . . . . . . . . . . . . . . . . . . . 217 Copying structure

variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Chapter 10 Using arrays 227 Declaring and creating an array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Declaring array variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227 Creating an array instance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Populating and using an array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Creating an implicitly typed array. . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Accessing an individual array element. . . . . . . . . . . . . . . . . . . . . . . . 231 Iterating through an array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 x Contents Passing arrays as parameters and return values for a method. . . 233 Copying arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Using multidimensional arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Creating jagged arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Chapter 11 Understanding parameter arrays 251 Overloading—a recap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Using array arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Declaring a params Array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Using params object[ ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Using a params array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Comparing parameter arrays and optional parameters. . . . . . . . . . . . . . 259 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Chapter 12 Working with inheritance 263 What is inheritance?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Using inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 The System.Object class revisited. . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Calling base class constructors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Assigning classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Declaring new methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Declaring virtual methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Declaring override methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Understanding protected access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Understanding extension methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Contents xi Chapter 13 Creating interfaces and defining abstract classes 287 Understanding interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Defining an interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Implementing an interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Referencing a class through its interface. . . . . . . . . . . . . . . . . . . . . . 290 Working with multiple interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Explicitly implementing an interface. . . . . . . . . . . . . . . . . . . . . . . . . 292 Interface restrictions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Defining and using interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Abstract classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Abstract methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Sealed classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Sealed methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Implementing and using an abstract class. . . . . . . . . . . . . . . . . . . . 307 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313 Quick reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Chapter 14 Using garbage collection and resource management 317 The life and times of an object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Writing destructors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Why use the garbage collector?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 How does the garbage collector work?. . . . . . . . . . . . . . . . . .

. . . . . 322 Recommendations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Resource management. . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Disposal methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . 323 Exception-safe disposal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 The using statement and the IDisposable interface. . . . . . . . . . . . . 324 Calling the Dispose method from a destructor. . . . . . . . . . . . . . . . . 326 Implementing exception-safe disposal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336 Quick reference.

Knjiga ”Programski jezik C++ sa rešenim zadacima”, nastala je

kao prate i  materijal za kurseve koje su autori držali na UniverzitetuSingidunum (Fakultet za informatiku i ra unarstvo i

Fakultet zamenadžment).Knjiga je orijentisana ka poslovnim aplikacijama i sadrži veliki

brojrešenih zadataka sa objašnjenjima.U dodatku knjige detaljno su opisana Microsoftova integrisanarazvoj

na okruženja Visual Studio C++ verzije 6 i 2008.Autori su uložili veliki napor da ova knjiga ne sadrži greške.

Svesugestije, korekcije i primedbe su više nego dobrodošle.- 3 - 

 

Sadržaj

Predgovor ....................................................................................................... 3Sadržaj .......................................................................................

.................... 41. Uvod .......................................................................................................... 61.1 Programski jezik C++ ...........

............................

............................

....... 61.2 Proširenja programskog jezika C .........................................................

71.3 Jednostavan C++ program ................................................................... 91.4 Celi brojevi i aritmetika .....................................

............................

.... 162. Realni brojevi, iteracije i donošenje odluka ............................................ 232.1 Realni brojevi ................................

............................

......................... 232.2 Iteracije (petlje) .................................................................................. 302.3 Donošenje odluk

e .............................................................................. 382.4 Pravila prioriteta ................................................................................

423. Koncept funkcije ...................................................................................... 493.1 Definicija funkcije .....................................................

........................ 493.2 Prosle ivanje  parametara po vrednosti .............................................. 523.3 Promenljive

kao atributi .................................................................... 544. Nizovi ............................................................................................

.......... 574.1 Definicija niza .................................................................................... 574.2 Višedimenzionalni nizovi ...

............................

............................

....... 645. Pokaziva i  ................................................................................................ 685.1

Deklarisanje i inicijalizacija pokaziva a ........................................... 685.2 Pokaziva

i  i nizovi ....................................

............................

............. 716. C-stringovi, pokaziva i, nizovi, funkcije, korisni ki definisani tipovi podataka i

tabele .......................................................................................... 766.1 Definicija i inicijalizacija stringa .................................................

...... 766.2 String konstante i pokaziva i  ............................................................. 796.3 Nizovi stringova i pokaziva a ................................

........................... 836.4 Pokaziva i, reference na promenljive i funkcije ................................ 866.5 Nizovi i

funkcije ................................................................................ 936.6 Stringovi i funkcije ......................................................................

...... 986.7. Korisni ki definisani tipovi podataka i tabele ................................ 1106.8 Strukture ............................

............................

............................

...... 1126.9 Nizovi struktura: tabele .................................................................... 1177. Uvod

u klase i objekte ........................................................................... 1197.1 Objekti, klase i objektno orijentisani siste

mi ................................... 119- 4 - 

 

7.2 Uvod u string objekte ....................................................................... 1217.3 Donošenje odluka u radu sa stringovima ....

............................

......... 1317.4 Funkcije i string objekti ................................................................... 1337.5 Primeri rada sa string

objektima ...................................................... 1387.6 Nizovi stringova ............................................................................... 1478. Programers

ki definisane klase i objekti ................................................ 1488.1 Deklarisanje objekata i klasa..................

............................

.............. 1488.2 Konstruktor klase ............................................................................. 1508.3 Preklapanje konstruktora..........

............................

............................ 1608.4 Destruktori ....................................................................................... 1648.5 Opšte preklapanj

e funkcija i šabloni funkcija .................................. 1749. Rad sa objektima ..............................................................................

...... 1789.1 Koriš enje  nizova, pokaziva a  i dinami ka  alokacija memorije ..... 1789.2 Konstruktor kopije ..........

............................

............................

......... 1859.3 Koriš enje rezervisane re i  const u radu sa klasama ..............

......... 1979.4 Objekti, funkcije i pokaziva i  .......................................................... 2159.5 Dinami ka alokacija objekat

a .......................................................... 2419.6 Stati

ki  podaci  lanovi i funkcije ..................................................... 24710. Nasle ivanj

e ......................................................................................... 25610.1 Primeri nasle ivanja  i osnovna terminologija .....................

........... 25610.2 Polimorfizam .................................................................................. 27810.3 Apstraktne osnovne

klase............................................................... 29711. Fajlovi .................................................................................................. 29911.1 Ulazno/i

zlazni tokovi ..................................................................... 29911.2 Procesiranje fajla karakter po karakter...........................................

32111.3 Slu ajni pristup fajlu ...................................................................... 32511.4 Procesiranje binarnog fajla sekvencijaln

o...................................... 33212. Specijalne teme: Prijateljske funkcije, preklapanje operatora, makroi iinline funkcije ...

............................

............................

............................

..... 33812.1 Prijateljske (friend) funkcije .......................................................... 33812.

2 Preklapanje osnovnih aritmetikih operatora ................................. 34412.3 Makroi i inline funkcije ............................................................

..... 359Dodatak A: Integrisano razvojno okruženje Microsoft Visual C++ .......... 365Dodatak B: Integrisano razvojno okružen

je Microsoft Visual C++ 2008 . 394Reference: ..........................................................

............................

............ 412- 5 - 

Knjiga ”Programski jezik C++ sa rešenim zadacima”, nastala je kao prate i  materijal za kurseve k

oje su autori držali na UniverzitetuSingidunum (Fakultet za informatiku i ra unarstvo i Fakultet z

amenadžment).Knjiga je orijentisana ka poslovnim aplikacijama i sadrži veliki brojrešenih zadataka sa

objašnjenjima.U dodatku knjige detaljno su opisana Microsoftova integrisanarazvojna okruženja Visual Studio C+

+ verzije 6 i 2008.Autori su uložili veliki napor da ova knjiga ne sadrži greške. Svesugestije, korekcije i

primedbe su više nego dobrodošle.- 3 - 

 

SadržajPredgovor ....................................................................................................... 3Sadržaj ...........................................................

............................

.................... 41. Uvod .......................................................................................................... 61.1 Programski

jezik C++ .......................................................................... 61.2 Proširenja programskog jezika C ................................................

......... 71.3 Jednostavan C++ program ................................................................... 91.4 Celi brojevi i aritmetika .........

............................

............................

.... 162. Realni brojevi, iteracije i donošenje odluka ............................................ 232.1 Realni brojevi ....

............................

............................

......................... 232.2 Iteracije (petlje) .................................................................................. 302.3

Donošenje odluke .............................................................................. 382.4 Pravila prioriteta ........................................................

........................ 423. Koncept funkcije ...................................................................................... 493.1 Definicija funkcije .........................

............................

........................ 493.2 Prosle ivanje  parametara po vrednosti .............................................. 523.3

Promenljive kao atributi .................................................................... 544. Nizovi ................................................................

............................

.......... 574.1 Definicija niza .................................................................................... 574.2 Višedimen

zionalni nizovi .................................................................. 645. Pokaziva i  ....................................................................................

............ 685.1 Deklarisanje i inicijalizacija pokaziva a ........................................... 685.2 Pokaziva

i  i nizovi ........

............................

............................

............. 716. C-stringovi, pokaziva i, nizovi, funkcije, korisni ki definisani

tipovi podataka i tabele .......................................................................................... 766.1 Definicija i inicijalizacija stringa .....................

............................

...... 766.2 String konstante i pokaziva i  ............................................................. 796.3 Nizovi stringova i pokaziva a ....

............................

........................... 836.4 Pokaziva i, reference na promenljive i funkcije ................................ 866.5

Nizovi i funkcije ................................................................................ 936.6 Stringovi i funkcije ..........................................

............................

...... 986.7. Korisni ki definisani tipovi podataka i tabele ................................ 1106.8 Strukture

............................

............................

............................

...... 1126.9 Nizovi struktura: tabele .............................................................

....... 1177. Uvod u klase i objekte ........................................................................... 1197.1 Objekti, klase i objektno

orijentisani sistemi ................................... 119- 4 - 

 

7.2 Uvod u string objekte ...............

............................

............................ 1217.3 Donošenje odluka u radu sa stringovima ......................................... 1317.4

Funkcije i string objekti ................................................................... 1337.5 Primeri rada sa string objektima .......................................

............... 1387.6 Nizovi stringova ............................................................................... 1478. Programerski definisane klase i

objekti ................................................ 1488.1 Deklarisanje objekata i klasa............................................................ 1488.2 

Konstruktor klase ............................................................................. 1508.3 Preklapanje konstruktora.................................................................. 

1608.4 Destruktori ....................................................................................... 1648.5 Opšte preklapanje funkcija i šabloni

funkcija .................................. 1749. Rad sa objektima .................................................................................... 1789.1 Koriš enje  nizov

a, pokaziva a  i dinami ka  alokacija memorije ..... 1789.2 Konstruktor kopije ..................................................................

......... 1859.3 Koriš enje rezervisane re i  const u radu sa klasama ....................... 1979.4 Objekti,

funkcije i pokaziva i  .......................................................... 2159.5 Dinami ka alokacija objekata .....................................................

..... 2419.6 Statiki  podaci  la

novi i funkcije ..................................................... 24710. Nasle ivanje .....................................................

............................

........ 25610.1 Primeri nasle ivanja  i osnovna terminologija ................................ 25610.2 Polimorfizam .......

............................

............................

................... 27810.3 Apstraktne osnovne klase................................................

............... 29711. Fajlovi .................................................................................................. 29911.1 Ulazno/izlazni tokovi ..................................

............................

....... 29911.2 Procesiranje fajla karakter po karakter........................................... 32111.3 Slu ajni pristup fajlu ....

............................

............................

.......... 32511.4 Procesiranje binarnog fajla sekvencijalno...................................... 33212. S

pecijalne teme: Prijateljske funkcije, preklapanje operatora, makroi iinline funkcije ...........................................................

............................

..... 33812.1 Prijateljske (friend) funkcije .......................................................... 33812.2 Preklapanje osnovnih aritmeti

kih operatora ................................. 34412.3 Makroi i inline funkcije ................................................................. 359Dodatak A: Integrisano

razvojno okruženje Microsoft Visual C++ .......... 365Dodatak B: Integrisano razvojno okruženje Microsoft Visual

C++ 2008 . 394Reference: .................................................................................................. 412- 5 - 

2.1. Povijesni pregled razvoja programskih jezika

Prva raèunala koja su se pojavila bila su vrlo složena za korištenje. Njih su koristiliiskljuèivo struènjaci koji su bili osposobljeni za komunikaciju s raèunalom. Takomunikacija se sastojala od dva osnovna koraka: davanje uputa raèunalu i èitanjerezultata obrade. I dok se èitanje rezultata vrlo brzo uèinilo koliko-toliko snošljivimuvoðenjem pisaèa na kojima su se rezultati

ispisivali, unošenje uputa – programiranje – se sastojalo od mukotrpnog unosa niza nula i jedinica. Ti nizovi su davali raèunaluupute kao što su: “zbroji dva broja”, “premjesti podatak s neke memorijske lokacije nadrugu”, “skoèi na neku instrukciju izvan normalnog slijeda instrukcija” i slièno. Kako jetakve programe bilo vrlo složeno pisati, a još složenije èitati i ispravljati,

ubrzo su se pojavili prvi programerski alati nazvaniasembleri(engl.assemblers).U asemblerskom jeziku svaka strojna instrukcija predstavljena je mnemonikom koji je razumljiv ljudima koji!itaju program. Tako se zbrajanje naj!eš"

e obavljamnemonikomADD

, dok se premještanje podataka obavlja mnemonikomMOV

. Time se postigla bolja!itljivost programa, no i dalje je bilo vrlo složeno pisati programe iispravljati ih jer je bilo potrebno davati sve, pa i najmanje upute ra!

unalu za svaku pojedinu operaciju. Javlja se problem koji"e kasnije, nakon niza godina, dovesti i do 

11 pojave C++ programskog jezika: potrebno je razviti programerski alat koji"e osloboditi programera rutinskih poslova te mu dopustiti da se usredoto!

i na problem koji rješava.Zbog toga se pojavljuje niz viših programska jezika, koji preuzimaju na sebe neke“dosadne” programerske poslove. Tako je FORTRAN bio posebno pogodan zamatemati!ke prora!une, zatim BASIC koji se vrlo brzo u!

io, te COBOL koji je bio u pravilu namijenjen upravljanju bazama podataka.Oko#972. se pojavljuje jezik C, koji je direktna prete!a današnjeg jezika C++. To je bio prvi jezik op"e namjene te je postigao nevi$

en uspjeh. Više je razloga tome: jezik  je bio jednostavan za u!enje, omogu"avao je modularno pisanje programa, sadržavao jesamo naredbe koje se mogu jednostavno prevesti u strojni jezik, davao je brzi kôd. Jezik nije bio optere"en mnogim složenim funkcijama, kao na primjer

 skupljanje sme#a (engl. garbage collection): ako je takav podsustav nekome trebao, korisnik ga je sam napisao.Jezik je omogu"avao vrlo dobru kontrolu strojnih resursa te je na taj na!in omogu"

io programerima da optimiziraju svoj kôd. Do unatrag nekoliko godina, 99% komercijalnih programa bili su pisani u C-u, ponegdje dopunjeni odsje!cima u strojnom jeziku kako bise kriti!ni dijelovi sustava u!inili dovoljno brzima. No kako je razvoj pro

gramske podrške napredovao, stvari su se i na podru! ju programskih jezika po!ele mijenjati. Složeni projekti od nekoliko stotina tisu"a, pa iviše redaka više nisu rijetkost, pa je zbog toga bilo potrebno uvesti dodatne mehanizmekojima bi se takvi programi u!

inili jednostavnijima za izradu i održavanje, te kojima bise omogu"ilo da se jednom napisani kôd iskoristi u više razli!itih projekata.Bjarne Stroustrup je zapo!eo#979. godine rad na jeziku “C s klasama” (engl.C with Classes

). Prije toga, uComputing Laboratory of Cambridge on je radio na svomdoktoratu te istraživao distribuirane sustave: granu ra!unalne znanosti u kojoj se prou!avaju modeli obrade podataka na više jedinica istodobno. Pri tome koristio se jezikom Simula, koji posjedovao neka važna svojstva koja su ga

!inila prikladnim za taj posao. Na primjer, Simula je posjedovala pojam klase: strukture podataka kojeobjedinjavaju podatke i operacije nad podacima. Korištenje klasa omogu"ilo je da sekoncepti problema koji se rješava izraze direktno pomo"u jezi!

nih konstrukcija.Dobiveni kôd je bio vrlo!itljiv i razumljiv, a g. Stroustrup je bio posebno fasciniranna!inom na koji je sam programski jezik upu"ivao programera u razmišljanju o problemu. Tako$er, jezik je posjedovao sustav tipizacije, koji je

!esto pomagaokorisniku u pronalaženju pogrešaka ve" prilikom prevo$enja. No naoko idealan u teoriji, jezik Simula je posrnuo u praksi: prevo$enje je biloiznimno dugotrajno, a dobiveni kôd se izvodio ekstremno sporo. Dobiveni program je bio neupotrebljiv, i da bi ipa

k pošteno zaradio svoj doktorat, gospodin Stroustrup semorao potruditi i ponovo napisati cjelokupan program u jeziku BCPL – jeziku niskerazine koji je omogu"io vrlo dobre performanse prevedenog programa. No iskustvo pisanja složenog programa u takvom jeziku je bilo užasno i g. Stroustrup je, pozavršetku svog posla na Cambridgeu,!

vrsto sebi obe"ao da više nikada ne"e takavsložen problem pokušati riješiti neadekvatnim alatima poput BCPL-a ili Simule.Kada se#979. zaposlio u Bell Labs u Murray Hillu, zapo!eo je rad na onome što"

ekasnije postati C++. Pri tome je iskoristio svoje iskustvo ste!eno prilikom rada nadoktoratu te pokušao stvoriti univerzalni jezik koji"e udovoljiti današnjim zahtjevima. 

12Pri tome je uzeo dobra svojstva niza jezika: Simula, Clu, Algol68 i Ada, a kao osnovu jeuzeo jezik C.

2.2. Osnovna svojstva jezika C++Èetiri su važna svojstva jezika C++ koja ga èine objektno orijentiranim:enkapsulacija(engl.encapsulation), skrivanje podataka(engl.data hiding ),nasljeðivanje

(engl.inheritance) i polimorfizam(engl. polymorphism). Sva ta tri svojstva doprinoseostvarenju takozvane objektno orijentirane paradigme programiranja.Da bismo to bolje razumjeli, pogledajmo koji su se programski modeli koristili u prošlosti. Pri tome je svakak

o najvažniji model proceduralno strukturiranog programiranja.Proceduralno programiranje se zasniva na promatranju programa kao niza jednostavnih programskih odsje!aka: procedura. Svaka procedura je konstruirana takoda obavlja jedan manji zadatak, a cijeli se program sastoji od niza procedura kojeme$

usobno sudjeluju u rješavanju zadatka.Kako bi koristi od ovakve podjele programa bile što izraženije, smatrano je dobrom programerskom taktikom odvojiti proceduru od podataka koje ona obra$uje: time je bilomogu"e pozvati proceduru za razli!ite ulazne podatke i na taj na!

in iskoristiti je na višemjesta. Strukturirano programiranje je samo dodatak na proceduralni model: onodefinira niz osnovnih jezi!nih konstrukcija, kao petlje, grananja i pozive procedura kojeunose red u programe i!ine samo programiranje daleko jednostavnijim.Princip kojim bismo mogli obilježiti proceduralno strukturirani model jest

 podijeli- pa-vladaj: cjelokupni program je presložen da bi ga se moglo razumjeti pa se zbog togaon rastavlja na niz manjih zadataka – procedura – koje su dovoljno jednostavne da bi semogle izraziti pomo"u naredbi programskog jezika. Pri tome, pojedina proceduratako$

er ne mora biti riješena monolitno: ona može svoj posao obaviti kombiniraju"i radniza drugih procedura.Ilustrirat"emo to primjerom: zamislimo da želimo izraditi kompleksan program zaobradu trodimenzionalnih objekata. Kao jednu od mogu"

nosti koje moramo ponuditikorisnicima jest rotacija objekata oko neke to!ke u prostoru. Koriste"i proceduralno programiranje, taj zadatak bi se mogao riješiti ovako:#. Listaj sve objekte redom.2. 

Za pojedini objekt odredi njegov tip.3. Ovisno o tipu, pozovi ispravnu proceduru koja"e izra!unati novu poziciju objekta.4. U skladu s tipom podataka ažuriraj koordinate objekta.Operacije odreðivanja tipa, izraèunavanje nove

pozicije objekta i ažuriranje koordinatase mogu dalje predstaviti pomoæu procedura koje sadržavaju niz jednostavnijih akcija.Ovakav programski pristup je bio vrlo uspješan do kasnih osamdesetih, kada su

rupan oprinos  

ha iskojna

uci a našimpros orimaŽivotni put, riječi i

praksa posljednjeg Božijegvjerovjesni a

Muhammeda, a.s., detaljno su zabilje ženi i

vjerno prenijeti potonjim generacijama. To jena

jvjerodostojniji izvještaj o životu jednog v

j rov jesnika. Do nas je prenijet putem pouzdani

h i sigurnihpredana koja, s naučne

strane, ne ostavljaju prostorani za najmanju

sumnju u vlastitu autentičnost. To namomo u ćava

da tačno i detaljno upoznamo Poslanikovživot,

kao i ono što je on govorio i (u)radio i ta o

jasno aspoznamo ono što je tokom povijesti

eventualnododato ili izmišljeno.

Općen to ledno,

stepen vjerodostojnostiP

osni ov o ivotopisa toliki je da

ne ost v lj  pro stora sumnji, što nije slučaj sa

životopisima ranijihposlanika. ako, npr.,

o

usau/Mojsiju, a s., imamopouzdanih vijesti, ali su se one

izmješale sa židovskimizmišljotinama i 

izmjenama, tako da se ne možemo s5

 

kpouzdan em o loniti n

po toei Tevrat/Stari z

v et ako želimo 

rekon trui ati v

erodo to nu  biografi u

Mu aa a. . Mnogi kritičari čak i na Zapadu

izraža vau

otvo eu

umn u

u neke kn ige Starog zav etaNeki tvrde da

po edine kn ige Starog zav eta niuzabil e

žene za života M aa a. niti epo re

dnonakon

egove  mrti

ve dugo

v e mena po i e  te d e

e z 

n ihov ut r . To

e  m po  ebi dovol n

oz

v u umn u

u utentičn

o t biografi e Mu aaa. ko u

m nud i Stari zav et. Sličan problem e  i

 im što

e  govori i

rdio I a a. .

ko eg kršni naziva u

I u om

Evanđela ko a  u  prizn

ata

od Crkve zapi aa u ne za

vri eme život

aa . . e

mnogo

ka ni e . Ta evanđela

uodabrana bez

z

n tven e valo i a i

iz eđu to tina

evanđel a koja u tada bila

u po edu kršana. Niautor t

vo tih evađel a ni e naučno

utvrđeno da iih čov ek mogao mi

e av e ti prihvatiti. Takođert

evanđela e adrže ne rekinuti lanac

p eno ila a koi i

do ezao do utora  Uz

to zapa ni kritičari erazilaze po

pit n u ime nekih au o a:  ko

u   ni

i kada u tačno živ eli?  Sve to dovodi u

umn u

autent čno t onoga št evanđel adrže

. Ako e tak a

ituaci ma

bioraf ma

velikihpo lan ika ko i

u kl učne lično ti

na r šr eni ih eligi a  u vi et u logično e  d

život pi i o niv ača drugi n i

hreligi a i

filozokih pravaca (poput Bude

onfuči

aidr ) budu

m

em tupn

u v erodo

to

o ti Predan a ko a n hovi

l edbe nici

pre

e o n ima 6

 

A K F I znanstvenog stajališta, nemaju

značajnije osnove Radise o pre an jim

a koja svećenici prenose je ni od rug ihpri

čemu u

svakoj generaciji bude prido ato nešto o

dpraznovjerja i legendi koje zdrav razum

oslo ođenvjer kog fanatizma

ne može prihvat ti

.Tako olazimo o

spozaje a su

ž votni

put ipra�sa poslje njeg Božijeg vjerovjesnika Muha

mme a as

ajvjeroostojniji i ajpouz a iji

izvještaji jersu pom o za ilježeni i vjer o preneseni

potonjimgeneraCIJama

slamski učenjaci su veoma

rano uočili da je zaočuvanje autentičn

osti onoga što je Muhamme a srekao ili

ura io pote a  senedneprekin i lana

cpo z a i h pre o la a putem kojeg će

osla ič kapraksa i mu r ost iti

vje o  

preneseniUtom pogleuje u

islamskoj tra iciji u ta ovlj en čitav niz naučnih

discipl na u vezi s prenošenjem onoga što je

Muhammea

rekao i ra io a

te

iscipline -inače poznate ponazivi a

ulumul-hadis, ilmul mus l eh, ilmur rid l ili

el d erhu  vet '  dilpre stavl jaj

mehanizme zaštitena osnovu ojih se

potpuno

po z a o može znati a je ono što  e dovo i  u

vezu s Poslje nji m Boži jimglasn om uistinu

tačno i autentičnoMusimanski

učenjac su ožili

ogroman napor naputu

po t avlja ja je n tv

e e  naučne meto ologije u kojoj su p

o tavlje

rigorozni kriteriji pomo kojihse

povlač jas a linija između autentičnih i

apokrif ihpre a ja  To je je tve

l č j  u vjersk m tra icijama7