现在的位置: 首页 > 综合 > 正文

C++ Primer学习笔记 (二)

2013年10月13日 ⁄ 综合 ⁄ 共 2926字 ⁄ 字号 评论关闭

6        注意case里面的大括号

case true:

       string file_name = getname();

       break;

case false:

//

….

这个代码不行,想想,如果先执行了false,然后false里面用到了file_name怎么办???

会提示没有定义!!!(并且编译器会报错,Dev C++尝试了)

因此要在true后添加大括号,表明局部作用域, 或者在switch外面定义变量.

7      ++*pi*++pi?

#include <iostream>

using namespace std;

int main()

{

    int j = 2, i =3 , i2 =4;

    int *pi = &i;

    //int *pi2 = pi+1;

    //pi2 = &i2;

    ++*pi;

    cout<<pi<<endl;

    int c = *pi++;

    cout<<pi<<endl;

    int b = ++*pi;

    cout<<i<<'/t'<<b<<'/t'<<c<<endl;

    cin.get();

}

0x22ff70

0x22ff74

4       3       4

8         const引用形参只能和非const对象匹配

如:string::size_type find_char(string& s, char c)

{

}

find_char(“hello world”, ‘h’)用不了,因为hello..是字符串常量 const对象

9     引用占多少字节

声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra&a相等。

另外sizeof(rn)与其原来的值一样sizeof(rd)==8,rd是一个double的引用!!!

不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

10        指向指针的引用

不能建立引用的引用,不能建立指向引用的指针。因为引用不是一种数据类型,所以没有引用的引用,没有引用的指针。

       例如:

       int n

       int &&r=n//错误,编译系统把"int &"看成一体,把"&r"看成一体,即建立了引用的引用,引用的对象应当是某种数据类型的变量

       int &*p=n;//错误,编译系统把"int &"看成一体,把"&p"看成一体,即建立了指向引用的指针,指针只能指向某种数据类型的变量

值得一提的是,可以建立指针的引用

        例如:

        int  *p;

        int *&q=p;//正确,编译系统把"int *"看成一体,把"&q"看成一体,即建立指针p的引用,亦即给指针p起别名q

        注意:学会这种分析方法,把什么看成一体,又把什么看成一体

11        最大公约数的递归函数

怎么做?会吗?

// 最大公约数的递归函数

#include <iostream>

using namespace std;

int maxFactor(int n, int m);

 

int main()

{

    cout << maxFactor(18,8) <<endl;

    cout << maxFactor(15,14) <<endl;

    system("pause");

}

 

int maxFactor(int n, int m)

{       

   

    if(n%m == 0)

        return m;

    else  // else可以不要!!!!!!!!!!!!!!!!!!!!!!!!!!!

        return maxFactor(m, n%m);

   

    /*  

    if(m!=0)

       return maxFactor(m, n%m);

    return n;

    */

    /*

    if(n!=0)

        return maxFactor(m%n, n);

    return m;

    */

}

后面两种参考C++ primer算法,前面是自己的

12       输出缓冲区的刷新

cout<<”his”<<flush; 不做任何操作,只刷新

cout<<”his”<<ends; 插入NULL

cout<<”his”<<endl; 插入新行

#include<iostream>

using namespace std;

int main()

{

    cout<<"FLUSH"<<flush;

    cout<<"ends"<<ends;

    cout<<"ENDL"<<endl;

。。。

}

FLUSHends ENDL

上面空格处有一个NULL,在运行结果窗口赋值进来时后面的ENDL复制不了了,因为字符串已经结束, 自己添加的, 显示运行结果!!!

13        容器元素类型的要求

1)    必须支持赋值运算符

2)    必须可以复制

3)    引用类型不可以

4)    输入输出IO标准库类型不可以

14     容器避免存储end操作符返回的迭代器 P276

while(first != end)

do

{

}

15   容器大小类型size_typeint代替行吗 P285

    vector <int> vec;

    vector<int>::size_type ix;

    cout<<"vec size: "<<vec.size()

        <<" capacity: "<<vec.capacity()<<endl;

    //for(int i=0; i<10; i++) 这个也行,当然可以使用整型啊

     for( ix=0; ix<10; ix++)

        vec.push_back(ix);

   // for(int i =0; i!=10; i++)

   cout<<"vec size: "<<vec.size()

        <<" capacity: "<<vec.capacity()<<endl;    

    while(vec.size()!=vec.capacity())

        vec.push_back(10);

    cout<<"vec size: "<<vec.size()

        <<" capacity: "<<vec.capacity()<<endl;

        vec.push_back(100);

        cout<<"vec size: "<<vec.size()

        <<" capacity: "<<vec.capacity()<<endl;

结果:

vec size: 0 capacity: 0

vec size: 10 capacity: 16

vec size: 16 capacity: 16

vec size: 17 capacity: 32

请按任意键继续. . .

16  this指针是什么

在普通的非const成员函数中,this指针类型是一个指向类类型的const指针,在const成员函数中,this指针是一个指向cosnt类类型的cosnt指针。

17  函数返回类型不一定在类作用域中 P381




18   必须在构造函数中初始化的成员 P388

1)    引用类型

抱歉!评论已关闭.