《Effective C++》导读

          导读:当我在写这篇文章的时候,《Effective C++》这本书我自己还没有看完,但是这本带给我的好处越发明显,这本书不是类似于《C++ primer》,他不是介绍C++的基本语法,在我的眼里《C++ primer》这本书更像是一部C++的字典,让你能认识很多“字”,但是我们知道,我们应该有很少的人去专门学习一本字典,但是《Effective C++》这本书更像是一本作文书,教你如何写出优美的文章,去改善程序的设计,在这个过程中,我发现了自己的一个问题,快速发展的今天,什么都在追求着块,我们越来越没有耐心去读一本书,浅阅读已经在慢慢侵蚀我,内心过于浮躁什么都在追求着块,于是我决定开始静下心来写这样的一个博客,完成一个《Effective C++》一个读书笔记,同时开始磨炼自己慢下来,进行深阅读。

         《Effective C++》这本书的导读部分已经写的非常好了,上面写的跟我在学校老师告诉我们的是一个道理,程序员还是要走上设计岗位的,可以写代码,但是必须得懂如何去设计一个程序,如何去设计一个软件的架构。

        当我们碰到一类问题的时候,我想初学c++的人,应该是不会去抽象出类来解决问题的,当然很遗憾,现在的诸多编程都是面向对象的方式,因此我们会经常与类(class)打交道,那么在进行类的设计的时候,我们就需要考虑:
       ①类之间的关系是什么,是采用那种继承方式(private、public、protect)
       ②那些类需要采用模板类,举个例子,STL中的很多类都是模板类,其中容器vector可能存放很多类型、int、string、double等等,同时STL也是泛型编程的代表作品。
       ③ 类之间的关系到底是选择private继承还是composition(复合),这里里面还可以延伸到设计模式,当然这本书不是讲设计模式的一本书
       ④在进行接口设计的时候,什么时候选择pass-by-value还是pass-by-reference。
       ⑤类的初始化和赋值,构造函数改如何设计,通过初始化列表进行初始化还是构造函数的方式,当类有继承的时候该如何去初始化.....
还有许多没有进行列举,光上面的几项就够我们喝一壶的啦,延伸出来的很多问题都需要相应的方式进行解决。
        初始化是指“给予对象初值的过程”,这一过程应该是在进入构造函数之前进行的,同时注意default构造函数是可悲调用和不带任何实参,那么就是两种情况,①形参也没有②形参都有默认值。

class A
{
public:
    A();   //default构造函数
private:
    int member1;
    int member2;
}

class B
{
public:
   explicit B(int x=0,bool y=false);    //default构造函数
}

上面的explicit是为了防止他们进行隐式的转换  ,当然他们任然可以使用显示的转换进行。
那么赋值和初始化的区别了?初始化应该是在进入构造函数之前。

class Stu
{
public:
    Stu(int a,int b);
private:
    int NO;
    int Age;
}

Stu::Stu(int a,int b):NO(a),Age(b)    //初始化
{
...
}

Stu::Stu(int a,int b)                //赋值
{
    No=a;
    Age=b;
}

        对象的赋"拷贝"还存在两种方式,copy构造函数(拷贝构造函数)、copy assignment操作符(重载=号),这两中方式远比看起来复杂的多,其中涉及到pass-by-vlaue、pass-by-reference的问题,还有派生类的拷贝构造函数和重载=的的问题,都会涉及一些问题。

class Widge
{
public:
    Widge();
    Widge(const Widge &p);
    Widge &operator =(const Widge &p);
...
};

Widge w1;
Widge w2(w1);   //拷贝构造函数
w1=w2;         //赋值,调用copy assignment
Widge w3=w2;    //注意:这里调用的copy构造函数

     我们需要注意的是  Widge w3=w2;当定义一个新的对象是一定会调用,copy构造函数,如果没有定义新的对象,那么copy构造函数不会被调用。问一个问题:针对上线的例子,Widge w3=w2,w3是初始化还是赋值?当我用vs2005进行调试的的,在进入copy构造函数的时候,this的内容是没有被初始化,因此这是一种赋值的方式。
     有了copy构造函数,我们就能够进行值传递,进行值传递首先要进行的第一步:将实参拷贝到形参当中,有copy构造函数将完成这一功能。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值