mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-27 14:54:05 -06:00
85 lines
2.1 KiB
Markdown
85 lines
2.1 KiB
Markdown
---
|
|
title: "12-pointers-to-routines"
|
|
aliases:
|
|
tags:
|
|
- cosc204
|
|
- lecture
|
|
sr-due: 2022-09-08
|
|
sr-interval: 3
|
|
sr-ease: 250
|
|
---
|
|
|
|
compiler ⇒ converts high level language description of program into assembly description of the program
|
|
assembler ⇒ converts assebly language description into machine code description
|
|
loader ⇒ loads program into memory, loaded at $4000
|
|
|
|
data has an address in memory, so does the application. Therefore functions must also have an address in memory which we can access
|
|
|
|
# pointers to routines
|
|
|
|
```
|
|
int (*method)(int param)
|
|
```
|
|
|
|
to assign a pointer to a routine
|
|
|
|
```
|
|
method = square;
|
|
```
|
|
|
|
to call the routine
|
|
```
|
|
result = method(6);
|
|
```
|
|
|
|
|
|
## basic example
|
|

|
|
|
|
## pointer as member of a struct;
|
|
pointers to routines can beused anyqhere variables can
|
|
|
|
- member of struct
|
|

|
|
|
|
- parameter to other routine
|
|

|
|
|
|
# modules
|
|
|
|
we can break programs into functional modules
|
|
- each modules excapsulates one behaviour
|
|
- give us a way of data hiding
|
|
|
|
add pointer to structs as parameters to methods in modules
|
|
- call this an abstract data type ADT
|
|
- we communicatre with an ADT via its public interface
|
|
- so that the implementation details are hidden
|
|
|
|

|
|
|
|
method in this struct are "black box"
|
|
|
|
we gain
|
|
- abstraction
|
|
- our queue has a print method, so could out stack, tree, and so on
|
|
- we call ob->print() without needing to know (exactly) which print method is called
|
|
|
|
## constructor
|
|
creates object, initialises it and sets up function pointers
|
|

|
|
|
|
## destructor
|
|
good to use. help with closing things and freeing memory
|
|
|
|
|
|
# modules overview
|
|
c programs consist of .c and .h files
|
|
- put ADT declarations in the .h (header) files
|
|
- we can `#include` these files if we want to use the ADT in a program
|
|
- put routine implementations in .c files
|
|
|
|
## queue header
|
|
pragma says include only once: prevent include loops
|
|

|