// This is where execution begins. Attributes can be sent to main int main() { // cout outputs text and a carriage return with endl // Statements must end with a semicolon // Strings must be surrounded by " // << sends the text via standard output to the screen cout << "Hello Internet" << endl; // ---------- VARIABLES / DATA TYPES ---------- // Variables start with a letter and can contain letters, numbers and _ // They are case sensitive // A value that won't change is a constant // Starts with const and it should be uppercase const double PI = 3.1415926535; // chars can contain 1 character that are surrounded with ' and is one byte in size char myGrade = 'A'; // bools have the value of (true/1) or (false/0) bool isHappy = true; // ints are whole numbers int myAge = 39; // floats are floating point numbers accurate to about 6 decimals float favNum = 3.141592; // doubles are floating point numbers accurate to about 15 digits double otherFavNum = 1.6180339887; // You can output a variable value like this cout << "Favorite Number " << favNum << endl; // Other types include // short int : At least 16 bits // long int : At least 32 bits // long long int : At least 64 bits // unsigned int : Same size as signed version // long double : Not less then double // You can get the number of bytes for a data type with sizeof cout << "Size of int " << sizeof(myAge) << endl; cout << "Size of char " << sizeof(myGrade) << endl; cout << "Size of bool " << sizeof(isHappy) << endl; cout << "Size of float " << sizeof(favNum) << endl; cout << "Size of double " << sizeof(otherFavNum) << endl; int largestInt = 2147483647; cout << "Largest int " << largestInt << endl; // ---------- ARITHMETIC ---------- // The arithmetic operators are +, -, *, /, %, ++, -- cout << "5 + 2 = " << 5+2 << endl; cout << "5 - 2 = " << 5-2 << endl; cout << "5 * 2 = " << 5*2 << endl; cout << "5 / 2 = " << 5/2 << endl; cout << "5 % 2 = " << 5%2 << endl; int five = 5; cout << "5++ = " << five++ << endl; cout << "++5 = " << ++five << endl; cout << "5-- = " << five-- << endl; cout << "--5 = " << --five << endl; // Shorthand assignment operators // a += b == a = a + b // There is also -=, *=, /=, %= // Order of Operation states * and / is performed before + and - cout << "1 + 2 - 3 * 2 = " << 1 + 2 - 3 * 2 << endl; cout << "(1 + 2 - 3) * 2 = " << (1 + 2 - 3) * 2 << endl; // ---------- CASTING ---------- // You convert from one data type to another by casting // char, int, float, double cout << "4 / 5 = " << 4 / 5 << endl; cout << "4 / 5 = " << (float) 4 / 5 << endl; // ---------- IF STATEMENT ---------- // Executes different code depending upon a condition // Comparison operators include ==, !=, >, <, >=, <= // Will return true (1) if the comparison is true, or false (0) // Logical operators include &&, ||, ! // Used to test 2 or more conditionals int age = 70; int ageAtLastExam = 16; bool isNotIntoxicated = true; if((age >= 1) && (age < 16)){ cout << "You can't drive" << endl; } else if(!isNotIntoxicated){ cout << "You can't drive" << endl; } else if(age >= 80 && ((age > 100) || ((age - ageAtLastExam) > 5))){ cout << "You can't drive" << endl; } else { cout << "You can drive" << endl; } // ---------- SWITCH STATEMENT ---------- // switch is used when you have a limited number of possible options int greetingOption = 2; switch(greetingOption){ case 1 : cout << "bonjour" << endl; break; case 2 : cout << "Hola" << endl; break; case 3 : cout << "Hallo" << endl; break; default : cout << "Hello" << endl; } // ---------- TERNARY OPERATOR ---------- // Performs an assignment based on a condition // variable = (condition) ? if true : if false int largestNum = (5 > 2) ? 5 : 2; cout << "The biggest number is " << largestNum << endl; // ---------- ARRAYS ---------- // Arrays store multiple values of the same type // You must provide a data type and the size of the array int myFavNums[5]; // You can declare and add values in one step int badNums[5] = {4, 13, 14, 24, 34}; // The first item in the array has the label (index) of 0 cout << "Bad Number 1: " << badNums[0] << endl; // You can create multidimensional arrays char myName[5][5] = {{'D','e','r','e','k'},{'B','a','n','a','s'}}; cout << "2nd Letter in 2nd Array: " << myName[1][1] << endl; // You can change a value in an array using its index myName[0][2] = 'e'; cout << "New Value " << myName[0][2] << endl; // ---------- FOR LOOP ---------- // Continues to execute code as long as a condition is true for(int i = 1; i <= 10; i++){ cout << i << endl; } // You can also cycle through an array by nesting for loops for(int j = 0; j < 5; j++){ for(int k = 0; k < 5; k++){ cout << myName[j][k]; } cout << endl; } // ---------- WHILE LOOP ---------- // Use a while loop when you don't know ahead of time when a loop will end // Generate a random number between 1 and 100 int randNum = (rand() % 100) + 1; while(randNum != 100){ cout << randNum << ", "; // Used to get you out of the loop randNum = (rand() % 100) + 1; } cout << endl; // You can do the same as the for loop like this // Create an index to iterate out side the while loop int index = 1; while(index <= 10){ cout << index << endl; // Increment inside the loop index++; } // ---------- DO WHILE LOOP ---------- // Used when you want to execute what is in the loop at least once // Used to store a series of characters string numberGuessed; int intNumberGuessed = 0; do { cout << "Guess between 1 and 10: "; // Allows for user input // Pass the source and destination of the input getline (cin,numberGuessed); // stoi converts the string into an integer intNumberGuessed = stoi(numberGuessed); cout << intNumberGuessed << endl; // We'll continue looping until the number entered is 4 } while (intNumberGuessed != 4); cout << "You Win" << endl; // ---------- STRINGS ---------- // The string library class provides a string object // You must always surround strings with " // Unlike the char arrays in c, the string object automatically resizes // The C way of making a string char happyArray[6] = {'H', 'a', 'p', 'p', 'y', '\0'}; // The C++ way string birthdayString = " Birthday"; // You can combine / concatenate strings with + cout << happyArray + birthdayString << endl; string yourName; cout << "What is your name? "; getline (cin,yourName); cout << "Hello " << yourName << endl; double eulersConstant = .57721; string eulerGuess; double eulerGuessDouble; cout << "What is Euler's Constant? "; getline (cin,eulerGuess); // Converts a string into a double // stof() for floats eulerGuessDouble = stod(eulerGuess); if(eulerGuessDouble == eulersConstant){ cout << "You are right" << endl; } else { cout << "You are wrong" << endl; } // Size returns the number of characters cout << "Size of string " << eulerGuess.size() << endl; // empty tells you if string is empty or not cout << "Is string empty " << eulerGuess.empty() << endl; // append adds strings together cout << eulerGuess.append(" was your guess") << endl; string dogString = "dog"; string catString = "cat"; // Compare returns a 0 for a match, 1 if less than, -1 if greater then cout << dogString.compare(catString) << endl; cout << dogString.compare(dogString) << endl; cout << catString.compare(dogString) << endl; // assign copies a value to another string string wholeName = yourName.assign(yourName); cout << wholeName << endl; // You can get a substring as well by defining the starting index and the // number of characters to copy string firstName = wholeName.assign(wholeName, 0, 5); cout << firstName << endl; // find returns the index for the string your searching for starting // from the index defined int lastNameIndex = yourName.find("Banas", 0); cout << "Index for last name " << lastNameIndex << endl; // insert places a string in the index defined yourName.insert(5, " Justin"); cout << yourName << endl; // erase will delete 6 characters starting at index 7 yourName.erase(6,7); cout << yourName << endl; // replace 5 characters starting at index 6 with the string Maximus yourName.replace(6,5,"Maximus"); cout << yourName << endl; // ---------- VECTORS ---------- // Vectors are like arrays, but their size can change vector <int> lotteryNumVect(10); int lotteryNumArray[5] = {4, 13, 14, 24, 34}; // Add the array to the vector starting at the beginning of the vector lotteryNumVect.insert(lotteryNumVect.begin(), lotteryNumArray, lotteryNumArray+3); // Insert a value into the 5th index lotteryNumVect.insert(lotteryNumVect.begin()+5, 44); // at gets the value in the specified index cout << "Value in 5 " << lotteryNumVect.at(5) << endl; // push_back adds a value at the end of a vector lotteryNumVect.push_back(64); // back gets the value in the final index cout << "Final Value " << lotteryNumVect.back() << endl; // pop_back removes the final element lotteryNumVect.pop_back(); // front returns the first element cout << "First Element " << lotteryNumVect.front() << endl; // back returns the last element cout << "Last Element " << lotteryNumVect.back() << endl; // empty tells you if the vector is empty cout << "Vector Empty " << lotteryNumVect.empty() << endl; // size returns the total number of elements cout << "Number of Vector Elements " << lotteryNumVect.size() << endl; // ---------- FUNCTIONS ---------- // Functions allow you to reuse and better organize your code cout << addNumbers(1) << endl; // You can't access values created in functions (Out of Scope) // cout << combinedValue << endl; cout << addNumbers(1, 5, 6) << endl; cout << "The factorial of 3 is " << getFactorial(3) << endl; // ---------- FILE I/O ---------- // We can read and write to files using text or machine readable binary string steveQuote = "A day without sunshine is like, you know, night"; // Create an output filestream and if the file doesn't exist create it ofstream writer("stevequote.txt"); // Verify that the file stream object was created if(! writer){ cout << "Error opening file" << endl; // Signal that an error occurred return -1; } else { // Write the text to the file writer << steveQuote << endl; // Close the file writer.close(); } // Open a stream to append to whats there with ios::app // ios::binary : Treat the file as binary // ios::in : Open a file to read input // ios::trunc : Default // ios::out : Open a file to write output ofstream writer2("stevequote.txt", ios::app); if(! writer2){ cout << "Error opening file" << endl; // Signal that an error occurred return -1; } else { writer2 << "\n- Steve Martin" << endl; writer2.close(); } char letter; // Read characters from a file using an input file stream ifstream reader("stevequote.txt"); if(! reader){ cout << "Error opening file" << endl; return -1; } else { // Read each character from the stream until end of file for(int i = 0; ! reader.eof(); i++){ // Get the next letter and output it reader.get(letter); cout << letter; } cout << endl; reader.close(); } // ---------- EXCEPTION HANDLING ---------- // You can be prepared for potential problems with exception handling int number = 0; try{ if(number != 0){ cout << 2/number << endl; } else throw(number); } catch(int number){ cout << number << " is not valid input" << endl; } // ---------- POINTERS ---------- // When data is stored it is stored in an appropriately sized box based // on its data type int myAge = 39; char myGrade = 'A'; cout << "Size of int " << sizeof(myAge) << endl; cout << "Size of char " << sizeof(myGrade) << endl; // You can reference the box (memory address) where data is stored with // the & reference operator cout << "myAge is located at " << &myAge << endl; // A pointer can store a memory address // The data type must be the same as the data referenced and it is followed // by a * int* agePtr = &myAge; // You can access the memory address and the data cout << "Address of pointer " << agePtr << endl; // * is the dereference or indirection operator cout << "Data at memory address " << *agePtr << endl; int badNums[5] = {4, 13, 14, 24, 34}; int* numArrayPtr = badNums; // You can increment through an array using a pointer with ++ or -- cout << "Address " << numArrayPtr << " Value " << *numArrayPtr << endl; numArrayPtr++; cout << "Address " << numArrayPtr << " Value " << *numArrayPtr << endl; // An array name is just a pointer to the array cout << "Address " << badNums << " Value " << *badNums << endl; // When you pass a variable to a function you are passing the value // When you pass a pointer to a function you are passing a reference // that can be changed makeMeYoung(&myAge); cout << "I'm " << myAge << " years old now" << endl; // & denotes that ageRef will be a reference to the assigned variable int& ageRef = myAge; cout << "ageRef : " << ageRef << endl; // It can manipulate the other variables data ageRef++; cout << "myAge : " << myAge << endl; // You can pass the reference to a function actYourAge(ageRef); cout << "myAge : " << myAge << endl; // When deciding on whether to use pointers or references // Use Pointers if you don't want to initialize at declaration, or if // you need to assign another variable // otherwise use a reference // ---------- CLASSES & OBJECTS ---------- // Classes are the blueprints for modeling real world objects // Real world objects have attributes, classes have members / variables // Real world objects have abilities, classes have methods / functions // Classes believe in hiding data (encapsulation) from outside code // Declare a Animal type object Animal fred; // Set the values for the Animal fred.setHeight(33); fred.setWeight(10); fred.setName("Fred"); // Get the values for the Animal cout << fred.getName() << " is " << fred.getHeight() << " cms tall and " << fred.getWeight() << " kgs in weight" << endl; fred.setAll(34, 12, "Fred"); cout << fred.getName() << " is " << fred.getHeight() << " cms tall and " << fred.getWeight() << " kgs in weight" << endl; // Creating an object using the constructor Animal tom(36, 15, "Tom"); cout << tom.getName() << " is " << tom.getHeight() << " cms tall and " << tom.getWeight() << " kgs in weight" << endl; // Demonstrate the inheriting class Dog Dog spot(38, 16, "Spot", "Woof"); // static methods are called by using the class name and the scope operator cout << "Number of Animals " << Animal::getNumOfAnimals() << endl; spot.getSound(); // Test the toString method that will be overwritten tom.toString(); spot.toString(); // We can call the superclass version of a method with the class name // and the scope operator spot.Animal::toString(); // When a function finishes it must return an integer value // Zero means that the function ended with success return 0; }
bool Animal::compareTo(Animal& animal){ Animal* ap = &animal; return this->weight == ap->getWeight(); }