27
CS 225 Data Structures Sept. 17 – Templates and Linked Memory Wade Fagen-Ulmschneider

PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

CS 225Data Structures

Sept. 17 – Templates and Linked MemoryWade Fagen-Ulmschneider

Page 2: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

class AnimalShelter {

public:

Animal & adopt();

// ...

};

animalShelter.cpp5

6

7

Page 3: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

class Animal {

public:

void speak() { }

};

class Dog : public Animal {

public:

void speak() { }

};

class Cat : public Animal {

public:

void speak() { }

};

animalShelter.cpp1

2

3

4

5

6

7

8

9

10

11

12

13

14

Page 4: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Abstract Class:[Requirement]:

[Syntax]:

[As a result]:

Page 5: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

class PNG {

public:

PNG();

PNG(unsigned int width, unsigned int height);

PNG(PNG const & other);

~PNG();

PNG & operator= (PNG const & other);

bool operator== (PNG const & other) const;

bool readFromFile(string const & fileName);

bool writeToFile(string const & fileName);

HSLAPixel & getPixel(unsigned int x, unsigned int y) const;

unsigned int width() const;

// ...

private:

unsigned int width_;

unsigned int height_;

HSLAPixel *imageData_;

void _copy(PNG const & other);

};

MP2: cs225/PNG.h18

19

23

30

37

43

50

57

73

80

90

96

118

119

120

121

127

132

Page 6: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

class Cube {

public:

~Cube() { std::cout << "~Cube() invoked."

<< std::endl; }

};

class RubikCube : public Cube {

public:

~RubikCube() { std::cout << "~RubikCube() invoked."

<< std::endl; }

};

virtual-dtor.cpp4

5

6

7

8

9

10

11

12

std::cout << "Non-virtual dtor:" << std::endl;

Cube *ptr = new RubikCube();

delete ptr;

27

28

29

Page 7: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

class CubeV {

public:

virtual ~CubeV() { std::cout << "~CubeV() invoked."

<< std::endl; }

};

class RubikCubeV : public CubeV {

public:

~RubikCubeV() { std::cout << "~RubikCubeV() invoked."

<< std::endl; }

};

virtual-dtor.cpp15

16

17

18

19

20

21

22

23

24

25

std::cout << "Virtual dtor:" << std::endl;

CubeV *ptrV = new RubikCubeV();

delete ptrV;

31

32

33

Page 8: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider
Page 9: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Mattox Monday

Page 10: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Abstract Data Type

Page 11: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

List ADT

Page 12: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

What types of “stuff” do we want in our list?

Page 13: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Templates

Page 14: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

T maximum(T a, T b) {

T result;

result = (a > b) ? a : b;

return result;

}

template1.cpp1

2

3

4

5

6

7

Page 15: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

#pragma once

class List {

public:

private:

};

List.h12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

List.cpp12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Page 16: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

List Implementations1.

2.

Page 17: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Linked Memory

C S 2 2 5Ø

Page 18: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

class ListNode {

T & data;

ListNode * next;

ListNode(T & data) : data(data), next(NULL) { }

};

List.h28

29

30

31

32

Page 19: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Linked Memory

2 2 5Ø

Page 20: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Linked Memory

C SØ

2 2 5Ø

Page 21: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

#pragma once

template <class T>

class List {

public:

/* ... */

private:

class ListNode {

T & data;

ListNode * next;

ListNode(T & data) :

data(data), next(NULL) { }

};

};

List.h12

3

4

5

28

29

30

31

32

33

34

35

36

37

38

39

40

41

#include "List.h"

template <class T>

void List<T>::insertAtFront(const T& t) {

}

List.cpp12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Page 22: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Running Time of Linked List insertAtFront

Page 23: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

void List<T>::printReverse()

const {

}

List.cpp14

15

16

17

18

19

20

21

22

Page 24: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Linked Memory

C S 2 2 5Ø

head

Page 25: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

Running Time of Linked List printReverse

Page 26: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

template <typename T>

T List<T>::operator[](unsigned index) {

}

List.cpp24

25

26

27

28

29

30

31

Page 27: PowerPoint Presentation · CS 225 Data Structures Sept. 17 –Templates and Linked Memory Wade Fagen-Ulmschneider

ListNode *& List<T>::_index(int index) const {

}

List.cpp33

34

35

36

37

38

39

40