referenceStart.cpp

URL: https://mirkwood.cs.edinboro.edu/~bennett/class/cmsc2040/fall2026/notes/words/code/referenceStart.cpp
 
#include <iostream>

using namespace std;

class SomeDataT {
   public:
       SomeDataT() {
          cout << "Constructor called " << endl;
       }

       ~SomeDataT() {
          cout << "Destructor called " << endl;
       }

       void Data(int newData) {
          data = newData;
       }

       int Data() const {
          return data;
       }

   private:
       int data{4};
};

int main() {

    // a demonstration of references 
    int a {100};
    int & b{a};
    int * c{& a};  // int * c = &a;


    cout << " int a {100}" << endl;
    cout << " int & b{a}" << endl;
    cout << " int * c{& a}" << endl;
    cout << " & a " << &a << endl;
    cout << " & b " << &b  << endl;
    cout << " & c " << &c  << endl;
    cout << endl;

    cout << " a = " << a << " b = " << b  <<  " *c = "
         << *c << " c = " << c << endl << endl;

    cout << "executing  a = 42 " << endl;
    a = 42;

    cout << " a = " << a << " b = " << b  <<  " *c = "
         << *c << " c = " << c << endl << endl;

    cout << "executing  b = 99 " << endl;
    b = 99;

    cout << " a = " << a << " b = " << b  <<  " *c = "
         << *c << " c = " << c << endl << endl;

    cout << "executing  *c = 22 " << endl;
    *c = 22;

    cout << " a = " << a << " b = " << b  <<  " *c = "
         << *c << " c = " << c << endl << endl;

    //cout << "executing  c = 10 " << endl;
    // c = 10;   // will not compile
    //c = static_cast<int *>(10);   // will not compile
    //c = reinterpret_cast<int *>(10); // will compile but will crash.
    //
    //cout << " a = " << a << " b = " << b  <<  " *c = "
    //     << *c << " c = " << c << endl << endl;
    //
    //cout << " c = " << c << endl;
    //cout << " *c = " << *c << endl;


    cout << endl;
    cout << "int d{100};" << endl;

    int d{100};
    c = &d;

    cout << "&d = " << &d << endl;
    cout << "c = " << c << endl;
    cout << " a = " << a << " b = " << b << "d = " << d << endl;
    b = d;
    cout << " a = " << a << " b = " << b << "d = " << d << endl;
    cout << " &a = " << &a << " &b = " << &b << "&d = " << &d << endl;
    

    SomeDataT * ptr{nullptr};
    ptr = new SomeDataT;
    cout << "The data is " << ptr->Data() << endl;
    // I am putting this in a code block because I don't want to reference
    // the data after it has been deleted.
    {
        SomeDataT & ptrRef {*ptr};
        cout << "The data is also " << ptrRef.Data() << endl;
    }

    delete ptr;
    ptr = nullptr;

    return 0;
}