《Effective C++》条款1:视c++为一个语言联邦

       我们因为准备面试而看的这本书,其实还是挺遗憾的,虽然这本书包含了很多面试官会问的问题,但是跟多的是如果去在细节把控这门语言。

        在面试的时候面试官可能会问你:什么是泛型编程?什么是智能指针?什么是元编程?(海康威视)当时我记得没有回答上来,也说明自己对于c++的一些知识不是很熟悉,面试最终也没有过。
         当然c++还支持了多重泛型编程、支持过程形式的编程、面向对象的编程、泛型编程、元编程等等,将C++视为一个联邦主要分为四个部分。
        ①C:C的基础部分是区块、语句、预处理、内置数据类型、数组、指针,这些都是来自于C,其实们在学习C++的时候,先学习的就是C。
        ②Object-Oriented C++:这一部分就开始,这里一般面试官就会问C++相对C有什么区别,我之前在知乎上看到别人说问这个问题的人就不专业,而且这个答案还被顶上去了,最终在我面试的时候就被问了这问题。那么其实就是继承、封装、多态,动态绑定的其实就是通过virtual来实现的。
        ③Tempalte:对于泛型编程,我也不知道什么时候使用模板,虽然了解模板的一些语法,但是到真正的使用当中,就不知道怎么使用了,下面的章节会对泛型编程进行详细的介绍。
        ④STL:标准模板库就是泛型编程的代表作品,标准模板库中涉及容器:vector、list等,迭代器:iterators,算法:最常见的就是sort()排序算法,函数对象、里面很多都是通过模板进行实现。
         对于这四个的层次,需要进行高效的编程的时候,就会知道,例如当我们对内置类型pass-by-value比pass-by-reference高效,如果是自定的构造函数和析构函数,pass-by-reference可能会更好,这里涉及构造函数和析构函数的调用次数,pass-by-value的时候需要将实参通过拷贝构造函数的形式传递给形参,最后形参还要调用析构函数。如果深入了解STL了,就会发现迭代器和函数对象其实都是C指针之上塑造出来的,所以对于迭代器和函数对象,pass-by-value同样适用。
        补充上面几个名字的我自己的理解。
        泛型编程:对于某一个类或者函数要处理多种数据类型,基于模板,来设计出能够进行统一处理的方法的编程方式。
        元编程:模版元程序由元数据和元函数组成,元数据就是元编程可以操作的数据,即C++编译器在编译期可以操作的数据。元数据不是运行期变量,只能是编译期常量,不能修改,常见的元数据有enum枚举常量、静态常量、基本类型和自定义类型等
        函数对象:定义了调用操作符()的类对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子

class A
{
public:
    int operator() int val
    {

        return this->num+val;    
    }

private:
    int num;
}

int main()
{
    A func;
    int m,n;
    n=1;
    m=func(n);

    return 0;
}

   本人也还在学习之中,如果存在不对的地方,还请指正

你可能感兴趣的:(《Effective,c++》)