strchr函数用法_c++ strchr函数_strchr函数原型(7)

电脑杂谈  发布时间:2017-02-28 18:06:59  来源:网络整理

class Foo {
    public:
        Foo(int f);
        ~Foo();

    private:
        DISALLOW_COPY_AND_ASSIGN(Foo);
};
如上所述,绝大多数情况下都应使用DISALLOW_COPY_AND_ASSIGN宏.如果类确实需要可拷贝,应在该类的头文件中说明原由,并合理的定义拷贝构造函数和赋值操作.

注意在operator=中检测自我赋值的情况(yospaly注:即operator=接收的参数是该对象本身).

为了能作为STL容器的值,你可能有使类可拷贝的冲动.在大多数类似的情况下,真正该做的是把对象的指针放到STL容器中.可以考虑使用std::tr1::shared_ptr.

结构体VS.类:仅当只有数据时使用struct,其它一概使用class.

在C++中struct和class关键字几乎含义一样.我们为这两个关键字添加我们自己的语义理解,以便为定义的数据类型选择合适的关键字.

struct用来定义包含数据的被动式对象,也可以包含相关的常量,但除了存取数据成员之外,没有别的函数功能.并且存取功能是通过直接访问位域(field),而非函数调用.除了构造函数,析构函数,Initialize(),Reset(),Validate()外,不能提供其它功能的函数.

如果需要更多的函数功能,class更适合.如果拿不准,就用class.

为了和STL保持一致,对于仿函数(functors)和特性(traits)可以不用class而是使用struct.

注意:类和结构体的成员变量使用不同的命名规则.

继承:使用组合(composition,YuleFox注:这一点也是GoF在<<DesignPatterns>>里反复强调的)常常比使用继承更合理.如果使用继承的话,定义为public继承.

定义:当子类继承基类时,子类包含了父基类所有数据及操作的定义.C++实践中,继承主要用于两种场合:实现继承(implementation inheritance),子类继承父类的实现代码;接口继承(intece inheritance),子类仅继承父类的方法名称.

优点:实现继承通过原封不动的复用基类代码减少了代码量.由于继承是在编译时声明,程序员和编译器都可以理解相应操作并发现错误.从编程角度而言,接口继承是用来强制类输出特定的API.在类没有实现API中某个必须的方法时,编译器同样会发现并报告错误.

缺点:对于实现继承,由于子类的实现代码散布在父类和子类间之间,要理解其实现变得更加困难.子类不能重写父类的非虚函数,当然也就不能修改其实现.基类也可能定义了一些数据成员,还要区分基类的实际布局.

结论:(1)、所有继承必须是public的.如果你想使用私有继承,你应该替换成把基类的实例作为成员对象的方式.(2)、不要过度使用实现继承.组合常常更合适一些.尽量做到只在“是一个”(“is-a”,YuleFox注:其他“has-a”情况下请使用组合)的情况下使用继承:如果Bar的确“是一种”Foo,Bar才能继承Foo.(3)、必要的话,析构函数声明为virtual.如果你的类有虚函数,则析构函数也应该为虚函数.注意数据成员在任何情况下都必须是私有的.(4)、当重载一个虚函数,在衍生类中把它明确的声明为virtual.理论依据:如果省略virtual关键字,代码阅读者不得不检查所有父类,以判断该函数是否是虚函数.

多重继承:真正需要用到多重实现继承的情况少之又少.只在以下情况我们才允许多重继承:最多只有一个基类是非抽象类;其它基类都是以Intece为后缀的纯接口类.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-35033-7.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 焦宁
      焦宁

      总局盯着小米电源查一段时间

    • 董雨晴
      董雨晴

      你是美国佬的私生子吗

    热点图片
    拼命载入中...