200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器

C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器

时间:2022-08-24 19:02:39

相关推荐

C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器

1. 继承的构造函数

1.1 C++11新标准中,派生类可以重用其直接基类定义的构造函数。

继承方式是提供一条注明了直接基类名的using声明语句。

class Bulk_quote : public Disc_quote{public:using Disc_quote::Disc_quote; // inherit Disc_quote's constructorsdouble net_price(std::size_t) const;};<=>derived(parms) : base(args) {}例如:Bulk_quote(const std::string& book,double price,std::size_t qty,double disc):Disc_quote(book,price,qty,disc){}

● 构造函数的using声明不会改变该函数的访问级别,不能指定explicit或constexpr属性。

● 派生类不能继承默认、拷贝和移动构造函数。如果派生类没有直接定义这些构造函数,则编译器会为其合成它们。

2. 继承的构造函数的特点

当一个基类构造函数含有默认实参时,这些默认值不会被继承。相反,派生类会获得多个继承的构造函数,其中每个构造函数分别省略掉一个含有默认值的形参。

eg. 基类有一个接受两个形参的构造函数,其中第二个形参含有默认实参,则派生类将获得两个构造函数,一个构造函数接受两个形参(没有默认实参),另一个只接受一个形参,它对应于基类中最左侧的没有默认值的那个形参。

大多数情况下派生类会继承基类的构造函数,则除两种情况:

● 派生类可以继承一部分构造函数,而为其他构造函数定义自己的版本,如果派生类定义的构造函数与基类的构造函数具有相同的参数列表,则该构造函数将不会被继承,定义在派生类中的构造函数将替换继承而来的构造函数。

● 默认、拷贝、移动构造函数不会被继承,这些构造函数按照正常规则被合成。如果一个类只含有继承的构造函数,则它将拥有一个合成的默认构造函数。

2.容器与继承

● 当我们使用容器存放继承体系中的对象时,通常必须采用间接存储的方式。

● 派生类对象直接赋值给积累对象,其中的派生类部分会被切掉。

● 在容器中放置(智能)指针而非对象。

● 对于C++面向对象的编程来说,一个悖论是我们无法直接使用对象进行面向对象编程。相反,我们必须使用指针和引用。因为指针会增加程序的复杂性,所以经常定义一些辅助的类来处理这些复杂的情况。

vector<shared_ptr<Quote>> basket;basket.push_back(make_shared<Quote>("0-201-82470-1", 50));basket.push_back(make_shared<Bulk_quote>("0-201-82470-1", 50, 10, 0.25));//此时basket存着shared_ptr,所以必须解引用basket.back()的返回值以获得运行net_price的对象cout << basket.back()->net_price(15) << endl;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。