- C、C++数组初始化:
数组的概念:一组由同种类型元素顺序排列而成的结构类型。
两个特点:1,数组元素类型相同,2,各个元素放在连续内存区域内。
C、C++不提供数组越界检测,有效数组访问空间0-n-1。
数组初始化:
Int a[5] = {0}; 将全部元素初始化为0,而
Int b[5] = {1}; 仅仅将第一个元素初始化为1,而将其余n-1个元素初始化为0;
Int c[] = {1,2,3,4,5};自动使得数组长度为5.
- C++模板类和类模板的区别:
template <class T> class A{ public: A {}; ~A{}; void show() { cout<< n <<endl; }; void setN( T mn) { n = mn; }; private: T n; }
上面定义的是一个类模板,在编译如下语句:
A<int> a;
时,编译器将用类模板生成模板类:
class A{ public: A {}; ~A{}; void show() { cout<< n <<endl; }; void setN( int mn) { n = mn; }; private: int n; }
然后通过这个模板类来实例化对象a。
同样模板函数和函数模板也是一样的,编译器实际上不会为函数模板或类模板生成任何代码。
还有一点要明确的是,类模板是一个模板,即一个类属,而模板类是一个类。类模板可以做函数的参数。
模板类,类模板,函数模板和模板函数的关系:
一个类模板在类层次结构中
既可以是基类也可以是派生类:
类模板可以从模板类派生
类模板可以从非模板类派生
模板类可以从类模板派生
非模板类可以从类模板派生
- 运算符重载:
友员函数重载运算符常用于运算符的左右操作数类型不同的情况。
运算符函数可以重载为成员函数或友员函数。 其关键区别在于成员函数具有this 指针,而友员函数没有,成员函数可以少传递一个参数对象。
不管是成员函数还是友员函数重载,运算符的使用方法相同。 但传递参数的方法不同,实现代码不同,应用场合也不同。
最好应用友元函数的场合:
1.第一个参数为内部类型变量。
2.如果运算符的操作数(尤其是第一个操作数)希望有隐式转换,则 必须用友员函数重载。
C++中不能用友元函数重载的运算符:
= ()【】->
单目运算符重载:
<函数类型> operator++(); //前缀运算符 ++<对象> 成员函数解释为 <对象>.operator++(),友元函数解释为 friend <对象>.operator++(A &a)
<函数类型> operator++(int); //后缀运算符 <对象>++ 成员函数解释为 <对象>.operator++(0),友元函数解释为 friend <对象>.operator++(A &a, 0);
后缀运算符的重载为了和前缀运算区别增加了一个伪参数。
- C 格式化输入输出:
printf函数:
附加函数说明 |
含义 |
l |
用于长整形数据的输出,可以加在格式符:u,x,o,d,比如ld%表示以10进制的形式,输出长整形数字 |
m(一个正整数) |
输出最小数据的最小宽度,如果数据实际宽度超过m,则按实际宽度输出,如果小于m,则左端补0或者空格,右对齐 |
.n(一个正整数) |
对于实数,表示输出n位小数;对于字符串,表示截取的字符个数 |
-m(一个负整数)或者单独一个-号 |
输出字符或者数字左对齐 |
scanf函数
附加格式说明 |
说明 |
l |
用来输入长整形数据(可用于%ld,%lo,%lx);用来输入double类型数据(可以用%ld或者%le) |
h |
用来输入短整型数据(可以用于%hd,%ho,%hx) |
字段宽度(一个正整数) |
用来指定输入数据所占的宽度(列数) |
* |
用来表示输入项在输入后不赋给相应变量 |