找到好工作,生活才快乐。要开始找工作了,复习下C++。
Book: Essential C++
(1)不加using namespace std;的后果是什么?
basicio.cpp:24: error: ‘string’ was not declared in this scope
basicio.cpp:26: error: ‘cout’ was not declared in this scope
basicio.cpp:26: error: ‘endl’ was not declared in this scope
(2)C++中如何进行变量初始化?
class MySum{ public: MySum(int a, int b); int getSum(void); int *ref; /* ref to a global value */ private: int sum; }; int main() { int a(12); /* 等价于a=12*/ MySum summer(1,2); /*无法采用直接赋值的方式,使用构造函数 */ MySum summer2 = summer; /* 隐式调用MySum::MySum(const MySum&)*/ } initobj.cpp: In function ‘int main()’: initobj.cpp:47: error: no matching function for call to ‘MySum::MySum()’ initobj.cpp:31: note: candidates are: MySum::MySum(int, int) initobj.cpp:23: note: MySum::MySum(const MySum&)
(3)class string的初始化方式有哪些?
(4)记忆<<, >>流操作符的方法
按照常规的口语顺序,“左右”,“读写”,顺序对应,左对应读,右对应写。
(5) C++中的=赋值背后的内涵
1. 简单赋值
2. 隐式自动调用copy constructor
3.
(6) C++中的==在不同情况下表示的含义
(7) vector的初始化
#include <iostream> #include <vector> using namespace std; int main() { vector<int> seq(12); seq[11] = 11; cout << seq[11] <<endl; seq[9002] = 12; /* disaster! use seq.push_back() instead */ cout << seq[9789] <<endl; /* disaster! */ }
(8) const二三事
// 语法上没有任何问题,但是const修饰符的目的是说成员变量在val()函数内不可以修改,那么一般来说,val()返回的_val也不应该能够被修改。由于函数前没有const修饰,所以_val实际上向外部开放了。
MyClass & val() const
{
return _val;
}
// 正确的写法:
const MyClass & val() const
{
return _val;
}
// 最完美的定义方法:
class val_class{
const MyClass & val() const {return _val;}
MyClass &val(){ return _val; }
};
void sample(const val_class *pbc, val_class &rbc)
{
pbc->val(); // 调用const版
rbc.val(); //调用non-const版
}
利用mutable修饰符,可以突破const的不可修改限制。例如mutable int _next;
(9)后置++重载的特殊性
为了和前置++加以区别,后置++的重载声明就行了一些变通,参数表中加入了一个冗余的int,实属特例:
inline MyObject & operator++(int){}
(10)