《Essential C++》笔记

1.P5.如果没有在main()末尾写下return语句,这一句会被自动加上。
2.P7.delete是关键字,所以STL删除用的是erase().
3.P8.assignment运算符(=)进行初始化是沿袭C语言风格,C++还有一种称之为”构造函数语法”.
4.P23.数组的大小必须是个常亮表达式或者值。
5.P47.实参是指针,形参是引用,引用是指针的别名,传的实际是指针。
6.P47.常用void display(const & vec)传参,不产生复制,也不会改变值。
7.P47.引用必须初始化,且无法重新指定,指针和引用在自增计算和sizeof计算有区别。
8.P48.函数中的局部对象是暂时存放在堆栈中,当函数执行完毕,该区域的内存就会被弃置,所以不能返回其地址。大多的C++编译器都会对“以传值方式返回的class object”,进行优化,加上额外的reference参数。
9.P50.delete []p数组方式,不能仅仅delete p。
10.P61.指针未初始化会随机指向一块内存,所以一般要初始化NULL,在使用之前也要进行NULL判断。
11.P73.list容器的迭代器一般用!=遍历判断边界,而不是用<这种。List地址不算顺序关系。
12.P78.Vector访问就像播放卡式磁带,List就像播放光盘唱片。
13.P81.List不支持iterator的偏移运算(i++)。
14.P85.标准库中的函数对象(function object)分为算术运算,关系运算,逻辑运算三大类。
15.P92.SET元素默认会按照less-than运算符排序。
16.P102.如果在class主体内定义函数,则这个member function会自动视为inline函数。
17.P103.C++文件扩展名有:.C ,.cc,.cpp,.cxx.
18.P105.Triangular t5();t5会被当做函数。
19.P107.析构函数绝对不会有返回值,也没有任何参数,也不会被重载。
20.P108.C++最难的部分之一,就是何时需要怎样定义destructor函数。
21.P108.下列代码会导致mat被析构,应使用深复制。

{
    Matrix mat(4,4);//调用构造函数
    {
        Matrix mat2 = mat;//调用赋值
        //...

    }//调用析构函数
}

22.P111.将某具体的类作为返回值的时候,一般要提供两种定义,const版本和non-const版本,如下代码:

class val_class
{
    public:
        val_class(const BigClass &v):_val(v){}
        const BigClass& val() const{return _val};
        BigClass& val(){return _val};
    private:
        BigClass _val;
}

void example(const BigClass *pbc,BigClass &rbc)
{
    pbc->val();//调用const版本;
    rbc.val();//调用non-const版本;
}

const 函数不能修改数据成员,const class obj不能引用非const 函数成员,可以引用非const数据成员,但不能修改。
23.P112.若将数据成员_next标示为mutable,则对其所做的改变不会破坏class的const性质。
24.P113.this指针:1,只有类存在非静态函数时候才存在;2,只有在非静态成员函数的非静态成员才会自动调用;3,非静态成员函数返回对象本身时,return *this;4,当函数参数名与成员变量同名的时候,this->n = n.
24.P 114.this指针在member function内用来指向其调用者,内部工作过程是,编译器自动将this指针加到每一个额member function的参数列表.
25.P116.member function 只有在不访问任何non-static member的条件下才能被声明为static.
26.P117.在class主体外部进行member function 定义时,无需重复添加关键字static,一般添加可以提示该函数为static函数.
27.P119.前置自增重载:Triangular_iterator& operator++();后置自增重载:Triangular_iterator& operator++(int),编译器自动为后置产生一个int参数(其值为0).
28.P119.friend关键字的一个重要作用:配套写某个类的Iterator 在类的定义中加上typedef Triangular_iterator iterator;
29.P123.友元类不能继承.
30.P131.typedef,可以将一个复杂的声明定一个简单的别名:

typedef void (num_sequence::*PtrType)(int);
PtrType _pmf;//定义一个函数指针

31.P132.

vector<vector<int> > seq;//> >中间有空格,否则会被语义解释为>>运算符.

32.P135.OOP(Object-Oriented-Porgramming)的三大特征:封装,继承(inheritance),多态(polymorphism).
33.P138.member function 的解析都在编译时静态进行.若要令其在运行时解析,则在申明时加上virtual.
34.P139.constructor执行顺序为基类->派生类,在直接desctructor派生类的时候,执行顺序为派生类->基类.但运用多态的时候,即基类指针指向派生类的时候,根据一般原则,凡是基类定义了虚函数,就应该将destructor声明为virtual,若不申明,delete 基类指针,调用析构函数时,只会看指针的数据类型,而不会去看赋值的对象,这样就会造成派生类内存泄露。
35.P142.当派生类的data member与基类的同名时候,会将基类的隐藏,但存在一份,可通过base::data member调用.
36.P146.静态成员函数无法申明virtual,因为其是类相关,无法调用this.
37.P147.基类destructor一般不申明为纯虚函数(无法执行析构),若为纯虚函数,也要定义函数体.
38.P149.派生类重载虚函数的时候,可以不在显示的申明virtual,但加上可以显示的表明它是虚函数.
39.P157.引用永远无法代表空对象,指针却可以是空指针,使用引用就无需检查是否为空了.
40.P159.有纯虚函数的类为抽象类.
41.P159.基类若无构造函数,会自动生成默认构造函数,若显示的提供了非默认构造函数,且无默认构造函数,则派生类的构造函数需要显示的调用基类的构造函数.
42.P160,函数的返回类型无法重载,基类和派生类在虚函数重载的时候返回值必须一致,有个例外,当基类的返回值为某个基类形式的时候.
43.P162.虚函数的静态解析(虚函数失效):1.基类的constructor和destructor内,只会调用本身的;2.使用的是基类的对象,而非指针或引用;3.用类域名指定了,base::.
43.P163.C++的多态性需要一层间接性.唯有用基类的pointer和reference才能支持多态.
44.P164.将派生类赋值给基类,只会将派生类的基类部分传递给基类对象.
45.P173.构造函数使用参数化列表比在函数体中赋值,效率高,后者不产生临时对象.
46.P174.一个类模版的定义:

template <typename elemType>
inline void
BinaryTree<elemType>::
insert(const elemTpye & elem)
{
    //...
}

47.P177.申明指针的引用,就可以改变指针的对象,也可以改变指针本身:

void func(int *&p)
{
    p = &m_value;//改变指针的内容

    // 也可以根据你的需求分配内存
    p = new int;
    *p = 5;//改变指针所指向的对象的内容
}

48.P181.非类型参数模版

template <int len, int beg_pos = 1>

49.P186.类模版无法基于参数列表的不同而重载.
50.P187.模版函数:非类成员函数的模版函数,普通类的成员函数的模版函数,模版类的成员函数的模版函数.
51.P194.异常处理:try,throw,catch;catch(…)捕获所有异常.
52.P198.面对任何一个被抛出的C++异常,你都可以在程序的某处找到一个相应的throw表达式(有些深藏在标准库中).
53.P199.尽量用对象,在异常处理机制终结某个函数之前,C++保证,函数中的所有局部”对象”的destructor都会被调用.
54.P201.自定义异常继承于标准异常,通过catch(exception)就可以捕获所有异常.
54.P203.string.c_str(),可以将string对象转换为C-style字符串.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Essential C》是一本C语言入门教材,它每一章节都设计了实例来帮助读者理解概念和语言基础。电子版则更方便了读者的阅读和学习。 电子版提供了搜索和书签功能,读者可以根据自己的需求快速找到需要的内容并添加书签方便以后查阅。此外,电子版还可以进行自定义设置,例如字体大小、背景颜色等,可以适应个人的视力和阅读习惯。 另外,与传统纸质书不同,电子版可以在不同设备上进行阅读,无论是手机、平板还是电脑等,都可以随时随地进行学习。在线阅读还能通过云端同步功能实现多设备共享,无需反复购买纸质版或电子版。 总之,《Essential C》电子版具有方便、灵活、多样化的优点,可以提高学习效率和便利性,是入门C语言学习者的好帮手。 ### 回答2: Essential C是一本C语言的经典教材,在C语言学习领域有着重要的地位。它浅显易懂,通俗易懂的文字风格以及丰富的示例代码,为初学者提供了优秀的学习资源。 Essential C电子版的出现,更加方便了广大编程爱好者的学习。电子版易于获取、拷贝和搜索,而且免费提供下载,无需支付任何费用。同时,它还能在不同的设备上进行阅读,让学习变得更加灵活。 电子版还具有与纸质版不同的特点。它可以轻松地添加笔记、书签等功能,方便读者随时回忆所学习的知识点。此外,电子版还提供了灵活的屏幕阅读方式,通过缩放和改变字体大小、背景色等方式来使读者更加舒适的阅读。 不过,电子版也存在一些缺点。因为它需要电子设备才能进行阅读,所以它的可移动性和泛用性相较于实体书籍较低。此外,对于想要离线阅读的读者,电子版便不具有实体书籍的优势。 综上所述,Essential C电子版为学习C语言的初学者提供了更加方便、灵活的学习方式,但它并不能完全替代实体书籍,两者都有自己的优缺点,而最终选择哪一种方式取决于读者自身的需求和使用习惯。 ### 回答3: Essential C是一本C语言程序设计的入门级教材,在学习C语言的过程中,是十分实用的一本教材。其电子版更是让读者们便于随时随地进行阅读学习,更加方便。 Essential C的电子版为读者带来了许多便利,首先在阅读上,不受到纸质版阅读的时间和地点的限制,可以通过任何一台电子设备,如电脑,手机,平板等就能轻松阅读。其次,在使用上,电子版更加方便了读者的查找和学习体验,例如增加了搜索功能,让读者更加便捷地找到所需要的内容,并且还能够进行注释和标记,极大提高了学习效率。 同时,Essential C的电子版还可以对其内容进行快速更新升级,保证其内容始终和时代同步,并且在学习之外,电子版还可进行交互式教学。比如说,在阅读的同时可以进行代码编辑等操作,相比于传统的纸质版,更具有互动性和趣味性。 总之,Essential C的电子版在方便性、使用性、更新性、互动性方面都具有很大优势,更加适合现代读者的学习习惯,极大地促进了C语言的教学工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值