Download presentation
Presentation is loading. Please wait.
Published byKamryn Loud Modified over 9 years ago
1
Win32 Programming Lesson 4: Classes and Structures
2
Last Time… We covered a quick overview of C++ Now, we look in more detail at the way classes work This is important, as you’ll need a working knowledge in order to interoperate with Win32 APIs
3
Classes Remember Structures? Well, it’s pretty handy to be able to combine the functions that use or manipulate the structure and the data itself That’s basically a class
4
Stacks Imagine a stack Remind me… Now, for a stack we want to be able to push and pop things off it Could implement in a struct… but can’t protect from direct manipulation Solution: A Class
5
Simple Class stack Fairly simple: class stack { private: int count; // Number of items on stack int data[STACK_SIZE]; // The items themselves public: // Initialize the stack void init(); // Push an item on the stack void push(const int item); // Pop an item from the stack int pop(); };
6
Member Variables In our stack, we declare two private member variables We don’t want direct manipulation Three levels of protection: Public – anyone can access Private – nobody outside the class Protected – similar to private except allows access from derived classes
7
Functions inline void stack::init() { count = 0; //Zero the stack counter… } Zeroes the stack counter, and gets the stack ready for useful work
8
Similarly… inline void stack::push(const int item) { data[count] = item; count++; } inline int stack::pop() { --count; return(data[count]); }
9
Using our stack… stack a_stack; // Stack we want to use a_stack.init(); // Initialize the count… a_stack.push(1); a_stack.push(2); std::cout << “Stack top: ” << a_stack.pop() << “\n”;
10
Our stack shortcomings… There are several… Let’s focus on just one: initialization Before we use the stack, it would be nice if we didn’t rely on the programmer to initialize it!
11
Constructor We can create a constructor which is called automagically… Add: // Initialize the stack stack(); inline stack::stack() { count = 0; } No longer need stack.init()!
12
Destructor Sometimes it is important to know when a class is being destroyed For example, a class which internally allocates memory must free the memory when it exits Thus, there are destructors… inline stack::~stack() { if (count !=0) std::cerr << “Warning: non-empty stack\n”; }
13
Parameterized Constructors Sometimes, it’s handy to force a constructor to take parameters that initialize the class For example, a class which holds firstnames and lastnames might require these on instantiation Example: person(const std::string fname, const std::string lname);
14
friend Functions Suppose we wished to compare two of our stacks… The member variables are private! Solution: make everything public (doh!) Better solution: the friend keyword Can define a friend function or a friend class which has access to the private members of the class
15
static variables Suppose you want to keep a running total of how many stacks you have at one time Could declare a global variable outside the class, but this is pretty ugly Instead, declare a static inside of private… private: static int stack_count; Tells the system that there is only ever one stack_count variable, no matter how many stacks we create
16
Classes… There’s a lot we haven’t covered in classes and C++ right now – inheritance, overloading, all that good stuff But what we have is enough to get you started with the Win32 APIs Remember, learning C++ in this class is a means to an end, not an end in itself
17
Pointers & Classes (OOH!) Just to mess with your heads… and because it’s useful Classes can also contain pointers This provides a really neato™ way of constructing linked lists
18
Consider class item { public: int value; item *next_ptr; } next_ptr is a pointer to another item We can create an object with the new syntax: class item *new_ptr; new_ptr = new item;
19
delete If new creates an object out of thin air (actually, the heap, but we’ll get to that later)… We must delete it Use: delete pointer; pointer = NULL; // Not needed, but good habit Warning deleting pointers to arrays is different (look this up)
20
Example: Linked list You can create a linked list quite easily, by creating two different classes: a link_list container and a class which holds the data elements Hint: you’ll need to use the friend notation to make sure you can manipulate the pointers…
21
Here… class linked_list { private: class linked_list_element { public: int data; // Data in this el. private: // Pointer to next element linked_list_element *next_ptr; friend class linked_list; }; public: linked_list_element *first_ptr; // First element // Initialize the linked list… linked_list() {first_ptr = NULL;} // Other member functions… };
22
Adding to the list… void linked_list::add_list(int item) { linked_list_element *new_ptr; new_ptr = new linked_list_element; (*new_ptr).data = item; (*new_ptr).next_ptr = first_ptr; first_ptr = new_ptr; }
23
Assignment Part I Just a quick test of SVN You should have an SVN repository at: https://cs.fit.edu/smsvn/ https://cs.fit.edu/smsvn/<tracks-username In it, you will find a project a0. Read the comments and fix it! Due Tuesday, before class. It should take you no more than 30 mins
24
Assignment Part II Create a program which does the following: Implements a doubly-linked list – that’s a linked list which is linked backward and forward – in a class Populates it with X random integer values, between 0 and MAX in value, where X and MAX are taken from the command line: “dblprog 20 40” would create a linked list with 20 random values in the range 0- 40. Prints the list out forwards and then in reverse Demonstrates inserting a value 31337 in position 7, and printing the list again You must use a class for this! Program should be a command line program in Visual C++ 2013 Think carefully about what to check in. Make sure when you check it out elsewhere it still builds! Please name your project “dblprog” – that way, we can grade just by cutting and pasting Due: 7 days from now before class starts. Make a new project in your repository called a1 (just like a0 that’s already there).
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.