《C++标准程序库》学习笔记1–第二章&第三章

————————— 第二章 —————————
1.(P11)
C++规定:除了以typename修饰外,template内的任何标志符号都被视为一个值(value)而非一个型别。
eg.

1
2
3
4
template <class T>
class MyClass{
    typename T::SubType *ptr;
};

这里typename指出SubType是class T中定义的一个型别,因此ptr是一个指向T::SubType的指针,否则SubType会被当作一个static成员,于是:
T::SubType *ptr被认为是SubType与ptr的乘积。

2.(P12)
template class 的 member template问题:
下面例子,即使两个型别之间可以自动转换,如int和double,如果我们对assign()使用不同的template型别,也会出错。

1
2
3
4
5
6
7
8
9
10
11
12
template <class T>
class MyClass{
private:
    T value;
public:
    void assign(cosnt MyClass<T> & x)
    {
        // x must have same type as *this
        value = x.value;
    }
    ...
};

再看这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class T>
class MyClass{
private:
    T value;
public:
    template <class X>  // member template
    void assign(cosnt MyClass<X> & x)
    {
        // allows different template types
        value = x.getValue();
    }
    T getValue() const{
        return value;
    }
    ...
};

现在,assign()的参数x和*this的型别并不相同,所以两个类也就不同
不能再直接存取MyClass<>的private成员和 protected成员,取而代之,
此例中使用了getValue()

3.(P14)
对基本型别的显示初始化
如果采用不含参数、明确的constructor调用语法,基本型别会被初始为
eg.

1
2
int i1;   // undefined value
int i2 = int();   // initialized with zero

4.(P16)
异常问题。
   ①.异常处理不是错误处理;
   ②.  void f() throw(xxx) 是f()抛出XXX类型的异常,
      而void f() throw()  是指f()抛出任何异常,这里好多人容易弄错。

5.(P16)
命名空间。
eg.

1
2
3
4
5
6
namespace tankywoo{
    class A;
    class B;
    ...
}
...

则using tankywoo::A会使A成为当前作用域内代表tankywoo::A的同义字
而using namespace tankywoo会使namespace内的所有名字曝光(A和B)。

————————— 第三章 —————————
6.(P23)
命名空间
上一篇也讲过。
使用C++标准程序库的任何标识符时,有三种选择:(以下都以cout为例)
①直接指定标识符:

1
   std::cout << "Tanky Woo" << std::endl;

②使用using declaration,可使我们不再需要加上”std::”

1
2
   using std::cout;
   cout << "Tanky Woo" << std::endl;

③使用using directive,那么std内定义的所有标识符都有效。

1
2
  using namespace std;
  cout << "Tanky Woo" << endl;

7.错误处理和异常处理
异常处理这块接触的少,而且第三章这里也是简略的讲到,所以这里先放着,有经验了再补。

8.配置器(Allocators)
同上。

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

《《C++标准程序库》学习笔记1–第二章&第三章》有267个想法

  1. 大哥能不能推荐一下学C++算法的步骤?我想先看严蔚敏的书,但总觉得很复杂,不好明白。很迷茫。。。。

    1. 1、主要是想到我的一些同学,把C++ Primer都看完了,却还没敲过一行代码……
      2、最近,我开始补基础啦,为找工作而努力准备了!
      ps. 看C++ Primer的速度飞快的说~嘿嘿
      《算法导论》我也要陆续开始看了,我只在项目里面用过一些很基本的数据结构(单链接、堆栈、图等最基本的内容)和算法(貌似就用过递归,其它的没遇到过……)

    2. 汗!我们当时学数据结构就是用的那本书,可能是老师的缘故,使我反而比较讨厌那本书了!代码编排乱七八糟的,讲解晦涩难懂……
      以前,我看过Weiss的《Data Structures and Algorithm Analysis in C》。基本的数据结构,还是会用的,用不着从头开始学。
      倒是算法学得很烂,可能是数学老师讲的缘故吧,呵呵

    3. 挂掉?意思是官方不再支持了吗?
      首先,Win32编程,还有大概10年的发展空间(某权威专家分析)。直接用API编程,开发效率低,速度慢,对人要求高。而用MFC、ATL、WTL封装之后,既保留了底层灵活性,又增加了开发效率,像什么360的某些dll、exe都有”微软基础类库应用程序“的tag,说明什么问题?!
      .net始终要依靠.net框架,而且始终缺少了灵活性,尤其是底层访问的灵活性
      C语言出来,汇编死了吗?没有!
      所以,我想说的是MFC死了,但是用C++封装的类库不会死,而且还会很有市场!

    4. 补充一点,我大二开始学的MFC(当时我们刚开了C++的课程,但是我C++基础并不怎么样……)
      ——-
      我觉得编程实际就学的是:
      数据结构+算法+实际应用(数据库、网络通信等)
      语言不局限(但是我很看好C/C++哦),开发工具不局限

    5. MFC上了年纪了,它的封装确实有点过时了。用MFC做界面比较麻烦,很大的原因就是它是很早以前的产品,当时操作系统的界面都很丑陋,人们关注的更多的是具体实现……
      但是,我觉得还行吧
      如果有个人带的话,学MFC可以少走些弯路,像我以前就走了很多弯路,什么都不知道,瞎撞呢

      1. 汗,我学编程快三年了,全部是自己瞎撞的,不知道走了多少弯路,也许我现在走的就是弯路,只是不允许我回头了而已。。。

        不过话说回来,连MFC都能学好的,掌握QT,GTK这些很简单的。

    6. 大二的时候,我拉了两个人一块学MFC, 可是他们都中途放弃了,我还活着,哈哈
      为什么呢?因为在绝望之际,我遇到了一本好书,哈哈

    7. 我也是从大学开始才学的编程,在学MFC之前的大一,我还学过VB,还写了一个软件(之前关注度很低,现在手头这个用VC做的东东一出来,这个VB做的东东也会一块发布的)

    8. MFC Windows程序设计(第2版)———Jeff Prosise

      MFC四大天王之一,特别适合初学者,尤其是连API程序设计都没学过的人

      ps.
      我之前和一个高手交流换肤技术,我说到”你从头开始做,岂不是很麻烦“(我指的是所有控件都由自己绘制)
      他回了句,”编程本来不就很麻烦吗?“(潜台词:你觉得这样麻烦,那样麻烦,你干嘛要学编程?)

    9. 不过我觉得你 就用API编程 + 数据库访问技术 + 网络通信技术 学习做一点实际项目,
      再加上你的ACM知识
      已经很够找一份软件开发的职位了!

      1. 数据库其实不是很难,而且应用特别广,很多专业都学了。
        网络更不用说。。。

        Windows API学过。。就是学的不多。大致了解。

        不过我对自己没信心,毕竟我不是这个专业的。。。

        自学有自己的局限性。

    10. 1、管它呢!QQ不是还分什么Windows版、Linux版的吗?如果你能靠Windows编程进腾讯也不错啊!
      2、那本书我也没看完,只看了900多页,COM技术还没看,短时间用不到,也不会写组件

    11. 也不是完全不看,面试比较重要的还有一部分,就是作品
      如果你做过项目,面试的一部分时间将会转移到你的项目的交流上面来

      当然语言基础,数据结构,算法是基础,所有公司都重视的。很大一部分的笔试面试题目都将是基础知识、思维、智力的

    12. 我记得你在哪里说过你不是这个专业,自学有一定难度。
      其实,我觉得你不是计算机专业,还好些!免得被那些庸师误导,自己都不会还讲,越讲越复杂!(照着书或者PPT念的人太多了!)相信我,自己看书还学得清楚些!至今为止,我的所有计算机专业知识,都是靠自己看书学来的

发表评论

电子邮件地址不会被公开。 必填项已用*标注