摘要:
//第二十章友元类与嵌套类 1友元类//与函数相同,类也可以作为另一个类的友元类,这样,另一个类的私有及其保护成员都会暴露给友元类,友元类可以通过自己的访问来访问另一个类的所有成员,但是,这并不代表另一个类可以访问它的友元类的所有成员/*#include <iostream>using namespace std;//首先定义TV类,也就是电视机类class TV{public: friend class Tele; //定义一个友元函数Tele; TV():on_off(off),volume(21),channel(3),mode(tv){} ~TV(){}private: e 阅读全文
摘要:
//第二十章友元类与嵌套类 2嵌套类//C++不光可以包含对像,还可以包含类,我们把C++所包含的类叫做嵌套类//不过,包含对像与嵌套类有着本质的不同,包含对像只是将另一个类的对像作为该类的成员,而嵌套类似则是在该类中定义了一种新的类型,这个类型只能在该类中使用#include <iostream>using namespace std;class rectangle{public: //这里直接在rectangel的公有部分定义了一个类 class point { public: void setX(int x){ itsx = x;} void setY(int y){ its 阅读全文
摘要:
// 12 什么时候使用私有继承,什么时候使用包含/*既然私有继承与包含的作用相同,为什么还要使用包含量呢?这是因为对于程序员来说,包含易于理解,我们可以显式地在包含类中定义被包含类的对像,然后用该对像调用被包含类的成员函数,这会让程序员看上去非常清淅易懂,但私有继承私不这么直观,它使类之间的关系变得更加抽像,并且很多情况下,这种关系比较抽像和复杂,程序员必须处理很多继承带来的问题,比如说派生类与基类的函数重名问题,也就是我们前面讲过的两义性,或者继承一些不该继承的方法或变量,经如说派生类的某个基类上还有基类,那么这个基类的方法也会延续到后面的所有派生类中显然,作为一个位地继承层次之外的类,包 阅读全文
摘要:
// 11图书 药品管理系统/*#include <iostream>#include <limits>using namespace std;class Date{public: Date(int n, float p):number(n),price(p){} float GetPrice()const{ return price; } int GetNumber()const{ return number;} virtual void print()const = 0; //抽像类,纯虚函数 virtual ~Date(){} private: int numbe 阅读全文
摘要:
//19 利用私有继承来实现代码重用//我们还有一种方法来实现这种包含式的代码重用,那就是私有继承,派生类从基类私有继承后,其类的公有成员和保护成员在派生类中都是私有成员,私有成员成为不可访问的成员,这意味着我们必须在派生类中定义一个公有的成员函数,才能访问从基类中继承而来的成员函数,这与一个类的私有区域中包含另一个类的对像是实现思想是一致的/*#include <iostream>#include <limits>using namespace std;class Date{public: Date(int n, float p):number(n),price(p) 阅读全文
摘要:
/*#include <iostream>using namespace std;//定认枚举形常量enum{small,large, same};class Date{public: Date(int i):date(i){} ~Date(){} int compare(const Date&); void print(){ cout<<date<<endl;}private: int date;};int Date::compare(const Date& two){ if(date < two.date) return small 阅读全文
摘要:
// 8 链表类Node//为了这个数据类Date以后,接下来还需要一个链表类Node,该类拥有一个插入函数insert和一个输出函数print,由于插入新节点和输出节点的数据这两个或能是所有链表类必备的,所以将它们声明为虚函数,以提醒它的子类必须实现这两个虚函数的功能/*#include <iostream>using namespace std;//定认枚举形常量enum{small,large, same};class Date{public: Date(int i):date(i){} ~Date(){} int compare(const Date&);priva 阅读全文
摘要:
// 9标签类Label/*//我们知道一个链表由标签,头节点,中间节点和尾节点组成,标签中保存着头节点的地址,头节点的next指针指向中间节点,中间节点的next指针指向了尾节点,因为我们可以将标签做成一个label类,该类负责创建和维护头节点#include <iostream>using namespace std;//定认枚举形常量enum{small,large, same};class Date{public: Date(int i):date(i){} ~Date(){} int compare(const Date&);private: int date;} 阅读全文
摘要:
//10头节点类,中间节点类和尾节点类/*#include <iostream>using namespace std;//定认枚举形常量enum{small,large, same};class Date{public: Date(int i):date(i){} ~Date(){} int compare(const Date&); void print(){ cout<<date<<endl;}private: int date;};int Date::compare(const Date& two){ if(date < two 阅读全文
摘要:
// 7 Data类//因此我们在写一个链表时,首先要考虑这一点,我们知道链表的作用是将无序的数据按一定的次序排列起来,比如说链表中每一个节点均可保存一个或多个数据,我们将各个节点排列好顺序,那么所有的数据自然也就排好了顺序,然后我们就可通过操作节点来实现对数据的操作,比如添加,删除,和修改等等//但是很多时候,为了提高代码的重复利用率和健壮性,我们需要将代码与数据分离,比如说我们将图书管理系统的数据库部分分做成一个类,并将它包含到其他类中,这样我们做的数据类,即图书管理系统的数据模块,可以被链表类修改,添加和删除等操作,但对于其他类是封闭的,同时链表类代码的修改不会景响到数据库,实现了代码与 阅读全文