C,C++中的几点注意

来源:互联网 发布:php for循环打印菱形 编辑:程序博客网 时间:2024/06/05 08:11

  • 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++中,下面三种对象需要调用拷贝构造函数:  1) 一个对象以值传递的方式传入函数体;  2) 一个对象以值传递的方式从函数返回;  3) 一个对象需要通过另外一个对象进行初始化;

  • 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)

字段宽度(一个正整数)

用来指定输入数据所占的宽度(列数)

*

用来表示输入项在输入后不赋给相应变量


原创粉丝点击