再谈面向对象编程

1、向基类构造函数传递实参:派生类构造函数的初始化列表只能初始化派生类的成员,不能直接初始化继承成员,但派生类构造函数可以通过将基类包含在构造函数初始化列表中来间接初始化继承成员。
如:class Bulk_item:public Item_base{
           public:
                 Bulk_Item(const std::string& book,double sales_price,std::size_t qty = 0,double disc_rate = 0.0):Item_base(book,sales_price),min_qty(qty),discount(disc_rate){}

};

2、一个类只能初始化自己的直接基类。

3、派生类析构函数不负责撤销基类对象的成员,编译器总是显示调用派生类对象基类部分的析构函数,每个析构函数只负责清除自己的成员。如果析构函数为虚函数,那么通过指针调用时,运行哪个析构函数将因指针所指向对象类型的不同而不同。

4、如果在构造函数或析构函数中调用虚函数,则运行的是为构造函数或析构函数自身类型定义的版本。

5、对象、引用或指针的静态类型决定了对象能够完成的行为。

6、在派生类作用域中派生类成员将屏蔽基类成员,即使函数原型不同,基类成员也会被屏蔽。

7、如果派生类重定义了重载成员,则通过派生类型只能访问派生类中重定义的那些成员。派生类不用重定义所继承的每一个基类版本,它可以为重载成员提供using声明,一个using声明只能指定一个名字,不能指定形参表,因此,为基类成员函数名称而作的using声明将该函数的所有重载实例加到派生类的作用域。

8、通过基类类型的引用或指针调用函数时,编译器将在基类中查找该函数而忽略派生类。

9、纯虚函数:在函数形参表后面写上 =0以指定纯虚函数。
如:class Disc_item:public Item_base{
            public:
                  double net_price(std::size_t)const = 0;
};
将函数定义为纯虚能够说明,该函数为后代类型提供了可以覆盖的接口,但是这个类中的版本觉不会调用。
含有(或继承)一个或多个纯虚函数的类是抽象基类,除了作为抽象基类的派生类的对象的组成部分,不能创建抽象类型的对象。

10、C++中一个通用的技术是定义包装类或句柄类。句柄类存储和管理基类指针,指针所指对象的类型可以变化,它既可以指向基类类型对象又可以指向派生类型对象,用户可以通过句柄类访问继承层次的操作,句柄的用户可以获得动态行为而无须操心指针的管理。

11、如果虚函数的基类实例返回类类型的引用或指针,则该虚函数的派生类实例可以返回基类实例返回的类型的派生类(或者是类类型的指针或引用)。
如:class Item_base{
            public:
                    virtual Item_base*   clone() const
                        { return new Item_base(*this);}
};
class Bulk_item:public Item_base{
            public:
                    Bulk_item* clone() const
                        { return new Bulk_item(*this);}
};

12、使用带比较器的关联容器:
如:typedef bool (*Comp)(const Sale_item&,const Sales_item&);
Comp为函数类型指针的同义词,用来比较Sales_item对象的比较函数想匹配。
std::multiset items(compare);
items是一个multiset,它保存Sales_item对象并使用Comp类型的对象比较它们。compare是一个比较函数,当在items中增加或查找元素时,将用compare函数对multiset进行排序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值