C++_类继承3-动态联编和静态联编】的更多相关文章

程序调用函数时,将使用哪个可执行代码块呢?编译器负责回答这个问题. 将源代码中的函数调用解释为特定的函数代码块被称为函数名联编(binding). 在C语言中,这非常简单,因为每个函数名对应一个不同的函数. 但是在C++中由于函数重载的缘故,这项任务非常复杂.编译器必须查看函数参数才能确定使用哪个函数.编译器可以在编译过程中完成联编,这被称作静态联编,又称为早期联编.然而,虚函数使这项工作变得更加困难.使用哪个函数不是在编译时就能确定的,因为编译器不知道用户将选择哪个类型的对象.所以编译器必须生…
如果基类使用动态内存分配,并重新定义赋值和复制构造函数,这将怎样影响派生类的实现?这个问题的答案取决于派生类的属性.如果派生类也使用动态内存分配,那就需要注意学习新的小技巧. 派生类不适用new //Base Class Using DMA class baseDMA { private: char * label; int rating; public: baseDMA(const char * l ="null", int r=0); baseDMA(const baseDMA &…
abstract base class,ABC 抽象基类 有时候is-a规则并不像看上去那么简单,例如圆和椭圆的关系.圆是椭圆的特殊情况.椭圆可以派生出圆.但是椭圆的数据成员及方法对于圆来说是信息冗余.圆类继承椭圆类会显得很繁琐. 如果把圆和椭圆分开定义,这种方法效率不高,因为它忽略了圆类和椭圆类的许多共同点. 还有一种方法:将圆和椭圆的共性抽象出来,放到ABC中,再由ABC派生出圆类和椭圆类.这样便可以使用基类指针数组同时管理圆类和椭圆类对象.即可以使用多态方法[j周1] . 例如圆和椭圆的共…
面向对象编程的主要目的之一是:提供可重用的代码.尤其是项目很庞大的时候,重用测试过的代码比重新编码代码要好得多. C++提供了更高层次的重用性.其中之一就是继承这个概念. 一些厂商提供了类库.类库由类声明和实现构成.类库通常是由源代码组成的,这意味着可以对其进行修改,以满足需求.但是也可以用类继承的方式,来扩展和修改类.这比修改代码的方法更好.正如继承一笔财产要比自己白手起家更容易. 继承的基本实现非常简单,但是要对继承进行管理,使之在所有情况下都能正常使用,则需要做一些调整.所以继承有简单的一…
编译器生成的成员函数 编译器会自动生成一些公有的成员函数——特殊成员函数. 1. 默认构造函数 提供构造函数的动机之一是确保对象总能被正确地初始化.如果类包含指针成员,则必须初始化这些成员.最好提供一个显式默认构造函数,将所有的类数据成员都初始化为合理的值. 如果定义了某种构造函数,编译器将不会定义默认构造函数.如果没有定义任何构造函数,编译器将定义默认构造函数. 默认构造函数要么没有参数,要么所有的参数都有默认值. 2. 复制构造函数 复制构造函数接受其所属类的对象作为参数.例如,Star类的…
public和private来控制对类成员的访问. 还存在另外一个访问类别,这种类别用关键字protected表示.protected和private相似,在类外只能用公有类成员来访问protected部分中的类成员.但是它们之间的区别体现在基类派生的类中.派生类的成员可以直接访问基类的保护成员,但不能直接访问基类的私有成员.对于外部世界来说,保护成员的行为和私有成员相似.但对于派生类来说,保护成员的行为与公有成员相似. 保护访问控制的好处是,让派生类能够访问公众补鞥呢使用的内部函数.最好对数据…
有时候希望同一个方法在派生类和基类中的行为是不同的.换句话说,方法的行为取决于调用该方法的对象.这种较复杂的行为称为多态——具有多种形态.即同一种方法其行为随上下文而异.有两种重要的机制可用于实现多态公有继承: 在派生类中重新定义基类的方法. 使用虚方法. 如果要在派生类中重新定义基类的方法,通常应将基类方法声明为虚的.这样,程序将根据对象类型而不是引用或指针的类型来选择方法版本.为基类声明一个虚析构函数也是一种惯例.这样做是为了确保释放派生对象时,按正确的顺序调用析构函数.注意virtual只…
一.概述: 通常来说联编就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程.按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编. 静态联编是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型,C语言中,所有的联编都是静态联编,并且任何一种编译器…
联编的概念 联编是指一个计算机程序自身彼此关联的过程,在这个联编过程中,需要确定程序中的操作调用(函数调用)与执行该操作(函数)的代码段之间的映射关系. 意思就是这个函数的实现有多种,联编就是把调用和对应的实现进行映射的操作.按照联编进行的阶段不同,可分为静态联编和动态联编. 静态联编 静态联编工作是在程序编译连接阶段进行的,这种联编又称为早期联编,因为这种联编实在程序开始运行之前完成的.在程序编译阶段进行的这种联编在编译时就解决了程序的操作调用与执行该操作代码间的关系. 动态联编 编译程序在编…
主要介绍了类的继承.虚函数.类继承的动态内存分配问题.继承与友元函数. 公有派生 基类的公有成员和私有成员都会成为派生类的一部分. 基类的私有成员只能通过基类的公有或者保护方法访问.但是,基类指针或引用只能用于调用基类方法,不能调用派生类方法.(这种兼容性使得可以用派生类对象来初始化基类对象,也可以将派生类对象赋给基类对象.) 基类的指针或引用可以在不显示类型转换的情况下指向派生类. 派生类的构造函数. 首先会创建基类的对象,派生类的构造函数应通过成员初始化列表将基类信息传递给基类的构造函数.…