struct to create a user-defined type.
User defined types, or structs as they are called in C++.
midpoint that
takes two points and returns their midpoint.point that encapsulated both the x and y
coordinates --- it's prototype would be
point midpoint(point a, point b);.
mid that encapsulated both alpha code and name
--- I'd have an array mid *A = new mid[20].
string, ifstream, and
ofstream objects that we've already been using are
structs rather than built-in types.
pointpoint would make
such a function simple and natural. We need to wrap up a
double for the x-coordinate and a
double for the y-coordinate into a single
object of a new type - point. Here's how that's
accomlished in C++:
|
|
main() function (more correctly,
before you try to use an object of type point).
point?P of type point.
point P;
double x within a point object named
P?P.xNote:
P is an object of type point.
P.x is an object of type double, so anything you can
do with a double you can do with P.x!
P.x usually called a data member (or
element) of P.
P.x = 1.1;
cin >> P.x;
point,
reading values into the object, and printing it out:
int main()
{
// Creates an object P of type point
point P;
// Reads & stores coordinate values
cout << "Enter x-coord: ";
cin >> P.x;
cout << "Enter y-coord: ";
cin >> P.y;
// Writes out point P
cout << "Point is (" << P.x
<< ',' << P.y << ")" << endl;
return 0;
}
cin >> P or cout << P?cin and cout know nothing about
the type point!
Answer: cin >> P.x >> P.y;
Note that cin >> P.x works perfectly well, because
cin is just reading into a double, which we know it
does just fine.
structs
Good news: You can use perform assignment by simply using the = operator
even for user-defined objects! It just works!
So, the code on the right works nicely. We also will see that the |
|
midpoint:
Hopefully this code is pretty much self-explanatory. Notice that
by wrapping up two doubles in the type
point I can, in a sense, return two objects from a
function! Take a look at this complete
program that reads two points from the user and prints out
their midpoint.
Note: The diagram on the right illustrates the call stack when we make a call like midpoint(P,Q).
Q: What is the type of Answer: point
|
|
struct midmid as follows:
struct mid
{
int alpha;
string first, last;
};
Notice that this struct has three data members, one of type int
and two of type string.
Mids.txt contains the names and alpha codes of
the Midshipmen in my two sections. I want to write a program that will read
that data and store it in an array for later processing.
To test what I've done, we'll simply allow the user to enter an alpha, and we'll return the name of the Mid with that alpha, or an error message if none is found. Creating the array and reading in data from the file is easy:
|
Quick check: Consider the code on the left.
1. A[i].alpha A[i].last A[i].first 2. mid* 3. mid* 4. mid 5. int 6. string 7. 166030 8. SHERIDAN |
struct vs class
C++ has two names / keywords for user-defined
types: struct and class.
They are more or less the same (except that in structs members
are public by default, and in classes they are private by
default.
Of course that distinction won't make any sense at
this point, but in case you come back and read this later ...),
but historically come from different places. C++
gets struct from C, the language that C++
extends. The term class comes from
"object-oriented programming", which is a style of programming
C++ supports, but which we do not cover in this course.
We are going to use the keyword struct to get you familiar with
what you'll see in the context of C programming in your Systems Programming
course. Of course this means that in your Objected Oriented Programming course
(taught using Java) the keyword class will be familiar.
Sample runs
$ ./a.out Enter alpha: 185112 RAINEL NUNEZ $ ./a.out Enter alpha: 200000 No Mid with that alpha was found!Solution
Enter triangle vertices: (0,0) (0,1) (1,0) Midpoint triangle verts: (0,0.5)(0.5,0.5)(0.5,0)Notice how my solution defines functions for writing and reading points!
struct to write a program that prints out the
10 youngest congresspeople, first and last
names. Here is my solution.