面向对象编程
--定义基类和派生类[续]
四、virtual与其他成员函数
C++中的函数调用默认不使用动态绑定。要触发动态绑定,必须满足两个条件:
1)只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定。
2)必须通过基类类型的引用或指针进行函数调用。
1、从派生类到基类的转换
因为...
分类:
编程语言 时间:
2016-05-12 22:19:56
阅读次数:
249
面向对象编程
--纯虚函数、容器与继承
I.纯虚函数
在函数形参后面写上 =0 以指定纯虚函数:
class Disc_item : public Item_base
{
public:
double net_price(size_t) const = 0; //指定纯虚函数
};
将函数定义为纯虚函数能够说明,该函数为后代类型提...
分类:
编程语言 时间:
2016-05-12 22:18:20
阅读次数:
184
1.什么是引用?
引用就是对象的另外一个名字。在实际程序中,引用主要用作函数的形式参数。
引用是一种复合类型,通过在变量名前面添加“&”符号来定义。复合类型是指用其他类型定义的类型。在引用的情况下,每一种引用类型都“关联到”某一其他类型。不能定义引用类型的引用,但是可以定义任何其他类型的引用。
引用必须用与该引用同类型的对象初始化:
int ival = 1024;
int& refVal...
分类:
编程语言 时间:
2016-05-12 22:17:45
阅读次数:
153
面向对象编程
--再谈文本查询示例[续/习题]
//P522 习题15.41
//1 in TextQuery.h
#ifndef TEXTQUERY_H_INCLUDED
#define TEXTQUERY_H_INCLUDED
#include
#include
#include
#include
#include
#include
#includ...
分类:
编程语言 时间:
2016-05-12 22:11:51
阅读次数:
291
模板与泛型编程
--模板定义
引言:
所谓泛型程序就是以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。
模板是泛型编程的基础。使用模板时可以无须了解模板的定义。
泛型编程与面向对象编程一样,都依赖于某种形式的多态性。面向对象编程中的多态性在运行时应用于存在继承关系的类。我们能够编写使用这些类的代码,忽略基类...
分类:
编程语言 时间:
2016-05-12 22:07:47
阅读次数:
228
模板与泛型编程
--类模板成员[续2]
六、完整的Queue类
Queue的完整定义:
template class Queue;
template
ostream &operator &);
template class QueueItem
{
friend class Queue;
friend ostream &
operat...
分类:
编程语言 时间:
2016-05-12 22:02:59
阅读次数:
193
模板与泛型编程
--实例化[续]
二、函数模板的显式实参
在某些情况下,不可能推断模板实参的类型。当函数的返回类型必须与形参表中所用的所有类型都不同时,最常出现这一问题。在这种情况下,有必要覆盖模板实参推断机制,并显式指定为模板形参所用的类型或值。
1、指定显式模板实参
如果函数形参类型不统一,该如何指定sum的返回类型?
t...
分类:
编程语言 时间:
2016-05-12 22:02:42
阅读次数:
210
模板与泛型编程
--一个泛型句柄类
引言:
【小心地雷】
这个例子体现了C++相当复杂的语言应用,理解它需要很好地理解继承和模板。在熟悉了这些特性之后再研究这个例子也许会帮助。另一方面,这个例子还能很好地测试你对这些特性的理解程度。
前面示例的Sales_item和Query两个类的使用计数的实现是相同的。这类问题非常适合于泛型编程:可...
分类:
编程语言 时间:
2016-05-12 22:01:13
阅读次数:
256
模板与泛型编程
--类模板成员[续1]
二、非类型形参的模板实参
template
class Screen
{
public:
Screen():screen(hi * wid,'#'),
cursor(hi * wid),height(hi),width(wid) {}
//..
private:
std::string sc...
分类:
编程语言 时间:
2016-05-12 22:01:03
阅读次数:
224
模板与泛型编程
--模板编译模型
引言:
当编译器看到模板定义的时候,它不立即产生代码。只有在用到模板时,如果调用了函数模板或定义了模板的对象的时候,编译器才产生特定类型的模板实例。
一般而言,当调用函数时[不是模板],编译器只需看到函数的声明。类似的,定义类类型的对象时,类定义必须可用,但成员函数的定义不是必须存在的。因此,应该将类定义和函数声明放在头文件中,而普通函数和...
分类:
编程语言 时间:
2016-05-12 22:00:51
阅读次数:
185