**Discussion 8**
10/13, 10/15
[(back to course webpage)](./mcs360_fall2020.html)
# Class in C++
Let us go back to the bubblegum dispenser problem in [Discussion 2 Part 3](https://homepages.math.uic.edu/~potla/teaching/fall2020/d2.md.html#part3:basicsofaclass) to revisit the basics of writing a class.
# Pairs in C++
+ A pair in C++ is defined by `std::pair < T, T >` where `T` is any datatype. So, to define a pair of integers, we can write `std::pair < int, int > A;`.
+ To create a pair, one needs to use the `std::make_pair(*,*)` function. Eg, `std::pair < int, int > A = std::make_pair(4, 10);`.
+ To access the first element, we use `A.first`. For the second element, we use `A.second`.
## Example Code
```cpp
#include
#include
typedef std::pair < double, double > Point;
int main() {
std::vector A;
A.push_back(std::make_pair(5.2, 10.2));
A.push_back(std::make_pair(1.2, 4.5));
A.push_back(std::make_pair(3.14, 2.71));
std::cout << "The vector of pairs:\n";
for(int i = 0; i < A.size(); i++) {
std::cout << "[" << A[i].first << ", " << A[i].second << "]\n";
}
return 0;
}
```
## Output of above code:
```bash
(base) potla@EKR:~/Desktop/mcs360$ ./d82
[5.2, 10.2]
[1.2, 4.5]
[3.14, 2.71]
```
## Sorting A
To sort the vector of pairs by their _first_ entries, do:
```cpp
std::sort(A.begin(), A.end())
```
You can then print the vector `A` again to get:
```bash
[1.2, 4.5]
[3.14, 2.71]
[5.2, 10.2]
```
Aside: How to sort by the second elements of the pairs?
If we want to sort by the second elements, ie change the vector A to `[3.14, 2.71], [1.2, 4.5], [5.2, 10.2]` we need to define a custom comparison function that compares two points by their second coordinates.
# Discussion Problems
## Problem 1
Write a class `Circle` in C++. It consists of two attributes: `center` and `radius`. `radius` is a double, and `center` is a `std::pair < double, double >` object.
It has three functions: `printCenter`, `printRadius`, and `printArea` that print the center, the radius and the area of the circle, respectively.
## Problem 2
Implement a function that shifts the circle around. The function `shift()` takes an `std::pair < double, double >` as input, and `C.shift(std::make_pair(a,b))` will shift the center of the circle `C` by `(a,b)`.
## Problem 3
Implement a function that dilates the circle. The function `dilate()` takes a **nonzero** double $\alpha$ as input, and multiplies the radius by $\alpha$.