CS 112 - Week 15 Lecture 1 - 2022-12-06 TODAY WE WILL * announcements * little tidbit: "modern" type-casting in C++ * quick intro to Git (with a little GitHub) * prep for next class * Should be working on Homework 11 -- * first attempts due by 11:59 pm Friday, Dec 9 * any improved bits for Homeworks 8-11 need to be submitted by 11:59 pm SUNDAY, Dec 11 so example solutions for Homeworks 8-11 can become reachable on Canvas around 12:01 am on MONDAY, Dec 12 * FINAL Exam: 12:40 pm THURSDAY, Dec 15 in BSS 317 * THURSDAY, Dec 8 - we'll review for the Final Exam! FRIDAY's (Dec. 9's) lab will be OPTIONAL -- I'll be there to answer questions about Homework 11, parts you may be improving on HWs 8-11, Final Exam questions, etc.! ===== little tidbit: "modern" type-casting in C++ ===== * covered a bit in Chapter 4 of Savitch...! * type-casting: asking for a value of one data type to be converted, or cast, into its roughly-equivalent value of another data type (casting an int to double, casting a double to an int, etc.) * there's an "older" syntax for this, and a newer, now-preferred syntax, and that's what we're lightly mentioning here * indeed, C++ now has FOUR "modern" type-casting operators...! * the most basic, considered safest, is a so-called static cast: static_cast<desired_type_to_cast_to>(value_to_cast) static_cast<int>(3.0) int thing; ... static_cast<double>(thing) * from a StackOverflow answer, still reachable at: https://stackoverflow.com/questions/103512/why-use-static-castintx-instead-of-intx "static_cast is an operator that's intended to be a valid conversion in the language, or that an appropriate constructor makes possible" * so, this provides a more elegant way to, say, avoid integer division: double my_fun(int my_int1, int my_int2) { ... double desired_result = (static_cast<double>(my_int1) / my_int2); ... } * so: more elegant, and the programmer's intent is more clear, than a kluge like multiplying an int by 1.0, for example! ====== LIGHT intro to git and GitHub ====== * git - a popular distributed version control system * invented by Linus Torvalds (yes, of Linux fame) * GitHub - a website, a web-based HOSTING service for software development projects that use git (so is GitLab) * can download a free local version of git from a number of places -- for example, desktop.github.com ...tries to detect your OS and gives you a link to download such an appropriate version of git * BASIC git command structure: git desired_cmd desired_args you can often access the man page for a particular git command using: man git-desired_cmd * git config command can let you configure various bits of user info and settings... // set desired_thing to desired_val across all // my local repositories git config --global desired_thing desired_val * some common stuff it is good to set: git config --global user.name "Sharon Tuttle" git config --global user.email "st10@humboldt.edu" * want to see your configuration setting? git config --list * a REPOSITORY is an archive of the files related to some project (typically source code and related documents) * often called a REPO for short * to make a new directory that is itself a repo: git init desired_directory_name to make the directory you are in right now a repo: (within that directory) git init * you can see the current status of your repo: git status * you can see the version history for the current branch using: git log * one RECOMMENDED approach to version control: "do small commits often... ...BUT, try to only commit things that COMPILE and WORK (try to leave the repo in a good state)" * do some work hey, I got a thing to work! commit that repeat in more git-based terms: work, then "stage", then commit * when you have a file you have changed, you first stage it or add it to the repo, ...then you can commit all the staged/added files at once; * how do you stage a file? git add file_name1 file_name2 ... * how do you commit all the currently-staged files? git commit -m "description of this commit" GOOD PRACTICE IS TO INCLUDE USEFUL SHORT DESCRIPTIVE COMMIT MESSAGES!!!!!!!!!!!!! ===== * SAY you have cloned a repo -- made a copy of that repo in a certain way; you can push new committed changes in your LOCAL (cloned) repo back to the remote main, the repo you cloned from, using git push origin main * BY THE WAY: git diff desired_file ...lets you see the differences between a current fiule and its committed version