Thursday, 13 July 2017

Reference to a Pointer

Notes for reading C++ Primer 4/e.
void ptrswap(int *&v1, int *&v2) {
    int *tmp = v2;
    v1 = v2;
    v2 = tmp;
}

int main() {
    int i = 10;
    int j = 20;
    int *pi = &i;
    int *pj = &j;

    cout << *pi << "  " << *pj << endl;
    ptrswap(pi, pj);
    cout << *pi << " " << *pj << endl;

    return 0;
}
Result:
10 20
20 10

Reference

Notes for reading C++ Primer 4/e.

Reference

nonconst reference can only reference to the same nonconst object.
int incr(int val) {
  return ++val;
}

int incrRef(int &val) {
  return ++val;
}

int incrRefConst(const int &val) {
  cout << val << endl;

  return val;
}

int main() {
  short v1 = 0;
  const int v2 = 42;
  double v4 = 3.4;

  int v3 = incr(v1);
  v3 = incrRef(v1);  // X: no matching function for call to 'incrRef'
  v3 = incrRefConst(v1);  // 0

  int v5 = incr(v4);
  v5 = incrRef(v4);  // X: no matching function for call to 'incrRef'
  v5 = incrRefConst(v4);  // 3
  cout << v4 << " " << v5 << endl;  // 3.4 3

  return 0;
}


[note]:

  • nonconst refernce parameter 的彈性較低,不能以 const object 初始化,也不能以字面常數 (ex. 42, 'a', "Hello", 3.14...) 或 rvalue 做為 argument.

Monday, 10 July 2017

Knockin' on Heaven's Door

-Original-

Key: G

|    I    |    V    |    ii    |    ii    |
|    I    |    V    |   IV   |   IV   |



-Gun's N' Roses' Version-
Key: Gb

|    I    |    V    |   IV   |   IV   |

Solo
| - 1 2#2 12 | 2 5 2#2 1 | 1--- | --- 61 |
| 6 5- 43 | 45-- 43 | 4 36-- | -- 34 14 |
| 3- 6 1 23 | 2- 3 3 | 1--- | --- 45 |
| - 43 43 45 | - 43 4 46 | --- 56 | 565 23232 1 | 1--- |


-Solo Cover-

Tuesday, 4 July 2017

Key Signature

Note for reading Key Signature.

Circle of Fifths


Key Signature

  • 0#b: C Dm Em F G Am Bdim
  • 1#: G Am Bm C D Em F#dim
  • 2#: D Em F#m G A Bm C#dim
  • 3#: A Bm C#m D E F#m G#dim
  • 4#: E F#m G#m A B C#m D#dim
  • 5#: B C#m D#m E F# G#m A#dim
  • 6#: F# G#m A#m B C# D#m E#dim
  • 6b: Gb Abm Bbm Cb Db Ebm Fdim
  • 5b: Db Ebm Fm Gb Ab Bbm Cdim
  • 4b: Ab Bbm Cm Db Eb Fm Gdim
  • 3b: Eb Fm Gm Ab Bb Cm Ddim
  • 2b: Bb Cm Dm Eb F Gm Adim
  • 1b: F Gm Am Bb C Dm Edim

Reference:

Wednesday, 28 June 2017

Array

Notes for reading C++ Primer 4/e.

Dynamic Array

value-initialize


In dynamic array, it could only initial w/ default value, not like static array, could initial as different values.
int *pia = new int[10]();  // 10 ints w/ default value 0

const

Notes for reading C++ Primer 4/e.

const Reference

Reference to a constant object.
const int ival = 1024;
const int &refVal = ival;
const int &r = 42;
const int &r2 = r + 3;


const_iterator

for (vector<string>::const_iterator iter = text.begin();
iter != text.end(); ++iter) {
    *iter = " ";  // error: *iter is const
}
vector<int> nums(10);
const vector<int>::iterator cit = nums.begin();
*cit = 1;  // OK
++cit;  // error: cit is const


Pointers & const

Pointers to const

const double pi = 3.14;
double *ptr = &pi;  // error: nonconst pointer
const double *cptr = &pi;  // OK

double dval = 2.99;
cptr = &dval;  // OK

const Pointer

int errNumber = 0;
int *const curErr = &errNumber;
curErr = curErr;  // error: curErr is const

if (*curErr) {
    errorHandler();
    *curErr = 0;  // OK
}

const Pointer Point To A const Object

const double pi = 3.14159;
const double *const pi_ptr = &pi;
pi_ptr is a constant pointer, point to a const double object.


Pointers & Typedefs

typedef string *pstring;
const pstring cstr;
Q: What is cstr?
A: Constant point, point to string.