Repo exploration for overloading ops in C++ Activity
Title | Exploring a C++ GitHub repository to learn about operator overloading |
Overview | Student will search a repo to find a specific class that implements infinite precision arithmetic and answer questions about it |
Prerequisite Knowledge | Basic CS1 background, including basic C++ class programming concepts |
Learning Objectives |
|
Contents |
Background:
The problem that this activity attempts to solve is how to introduce basic FOSS concepts to CS2 students in the context of learning about CS2-specific topics.
Before this activity is assigned, the students should be introduced to the concepts of online repositories, free and open source software, and to a very limited extent, the use of GitHub. It is not really necessary to know how to use the version control features of GitHub for this activity because the students are not cloning code or uploading it. They need to know how to search GitHub and open files stored there. They can do this activity entirely by browsing the code on-line.
The activity asks the students to search through the GitHub repository for the class that implements infinite precision decimal numbers. It then asks them to look at the interface file for this class. The particular objectives are to get them to learn something about exploring GitHub, about reading code and comments, about overloaded operators and inline versus non-inline functions.
In terms of their coding knowledge, they should know how to read C++ class interfaces and implementation files, know how to read C++ function definitions, and be able to write C++ programs that use classes. One of the questions asks them to examine a function that is recursive, without stating that it is recursive, and gets them to discover this. Students who have been introduced to recursive C++ functions will have a different response from those who have not.
Although no prerequisite knowledge abut open source or git is needed to do this activity, it serves as a good means for students to inform themselves about these. As such, students will be given specific reading materials before starting this project, including:
- https://www.gnu.org/philosophy/free-sw.html
- https://opensource.org/faq
- https://guides.github.com/activities/hello-world/
Directions:
Students should be told that, as they do all of these exercises, they should write the answers to all questions in the form provided. The instructor should create a template form to simplify grading and assessment of student responses.
- ITK (Insight Segmentation and Registration Toolkit) is an open-source, cross-platform system that provides developers with an extensive suite of software tools for image analysis. You can learn more about it from its website, https://itk.org . Find the page on this website that has a link to the Software Guide. Write down how many pages are in the latest Software Guide.
- The source code for ITK is available on GitHub https://github.com/. Go to the GitHub website and find the ITK repository. Write down how you found the download page for the repository.
- The developers of ITK decided that it was advantageous to create classes that implement infinite precision numbers. They distinguished between infinite precision decimal numbers and infinite precision integers. Find the interface file (header file) for the class that implements infinite precision numbers with decimal arithmetic and open the file. Provide answers to the following questions:
- What is the name of the header file?
- What is the name of the class?
- Who authored this code?
- When was it last modified?
- There are two functions in this file whose name is
operator>>
.- Are they public or private?
- How do they differ?
- When two functions have the same name what is this called?
- What does the first of these functions do? Read about this in the file's comments and in your textbook and explain in your own words what this function does.
- What is the purpose of the word
inline
-- why is it used?
- Notice that there are many functions defined in this file whose names contain the word
operator
, such asoperator+=
andoperator-
.- Why are they here? In other words, what use are these? You might have to read about this in your C++ textbook.
- Why, do you think, the developers created all of these operator functions?
- Find the implementation file for this interface and open it. What is its name?
- Find the implementation of
operator<
. Read it carefully.- Does it depend on any other user-defined functions? Which ones?
- Does it depend on any other user-defined functions? Which ones?
- Find the implementation of
operator+
. This depends on many functions.- List the operator functions that it depends on.
- What is unusual about this function? (Note for instructor: It is recursive, but the student may not realize this unless they study the code carefully.)
Deliverables:
The student will hand in a completed form containing the answers to the given questions. This template file is a template with the questions and a rubric.
Assessment:
The assignment can be graded in the traditional way, by a numeric score out of 100 possible points. The questions in the above template have suggested weights, but clearly the instructor is free to change the weights.
Grades on out-of-class assignments do not necessarily reflect how much a student has learned, for several reasons. To determine how well a student has learned about the actual C++ feature of overloaded operators and their use, as well as the GitHub related skills that should have been acquired, the instructor is better off by using in-class pop quiz given after the assignment is due. Therefore, no further assessment guidance is suggested here.
Comments:
This activity is an active-learning approach to teaching about operator overloading and in-line functions. Students might express frustration because they are being asked to learn something before they have been taught about it by the instructor. They need a bit of patience.
Additional Information:
ACM Knowledge Area/Knowledge Unit | Programming Languages/Object-Oriented Programming, Software Development Fundamentals/Fundamental Programming Concepts |
ACM Topic | Overloaded operators, in-line functions |
Level of Difficulty | Easy to moderate |
Estimated Time to Completion | About 2 to 3 hours |
Materials/Environment | Any platform with a modern Internet browser. |
Author(s) | Stewart Weiss |
Source | This is not dependent on any other activity. |
License | Creative Commons Attribution-ShareAlike 4.0 International License |
Suggestions for Open Source Community:
This can be adapted to many other language features and to other languages as well.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License