iostream的派生类,includeclass basepublic void showcount调用基

1,include iostreamh class basepublic void showcount调用基程序不全 , 缺少class base不明白啊 = =!【iostream的派生类,includeclass basepublic void showcount调用基】
2,c iostream的派生类有哪些iostream没有派生类,只是声明了几个外部类对象也就是cin cout cerr clog以及它们的宽字符版 。你可以查看iostream的源代码 , 带上宏一共就十几行代码我会继续学习,争取下次回答你
3,c中iostream类的基类是什么iostream实际上是一个别名 , 本体是basic_iostream模版类 。iostream和wiostream都是从basic_iostream模版类实例化出来的 。iostream是用于普通ANSI字符,wiostream用于宽字符(Unicode) 。iostream的定义:typedef basic_iostream<char, char_traits<char> > iostream;而basic_iostream则是继承自basic_istream和basic_ostream两个模版类 。实例化之后成为istream或wistream以及ostream和wostream 。所以如果广义的说,iostream继承自istream和ostream也是对的 。不过本质上说实际上是basic_iostream继承自basic_istream和basic_ostream , 然后用char实例化成了iostream 。iostream类的基类有两个,分别是basic_istream和basic_ostream,而这两个类又都是basic_ios类的派生类.一般是不加,如果不加的话要加上一句引用命名空间using namespace std;如果加上.h的话就不用加上那一句了 。
4,关于C基类派生类的引用和指针(1)首先回答第一个问题:用基类的指针指向派生类的对象,这样做可以体现C++的重要特性:多态性 。多态性其实也就是动态联编 。这样做的好处是:当基类里面定义了一个虚成员函数的时候,其派生类里面定义了同名的函数可以实现覆盖 。你的基类指针指向那个对象,就调用那个对象的该方法 。我举个例子你应该就明白了:ClassShape//基类:形状Public:virtualfloatCalcArea()…… ……}; ClassCircle:Pulic Shape//派生类:圆Public:float r;floatCalcArea()…… ……}; ClassSquare:Pulic Shape//派生类:正方形/长方形Public:float w,h;floatCalcArea()…… ……};定义一个基类指针:Shape*pShape=NULL;CircleC;SqureS;pShape = &C;pShape->CalcArea();//调用的是计算圆Circle类的CalcArea();pShape = &S;pShape->CalcArea();//调用的是计算四边形Square类的CalcArea();(2) 如果你能看明白上面的,第二个的问题就很简单了:Bb;//定义一个派生类B的对象bA &rb=b;//定义并初始化一个对象b的引用 (3)还有补充问题呀,那来个补充回答:引用就是别名,rb和b的访问范围应该是一样的 。他们指向同一个内存区域,修改rb和修改b都会影响b的内容 。基类的指针或者引用指向派生类的实例 , 这在面向对象编程中使用极其普遍 。A *pA = new B;这是一个基类指针指向一个派生类的实例 。B b; A &rb=b;这是一个基类引用指向(引用)派生类的实例 。至于这个指针pA和引用rb的访问范围,完全由pA和rb定义所在的范围决定,跟它们所指向的目标无关 。通过基类指针或者引用来访问派生类实例的意义在于,这种指针和引用可以通用于访问这个基类之下的所有派生类的对象 , 这一方面可以使用面向对象的“多态”特性,通过这个基类指针或者引用来调用虚函数的时候,实际执行的是派生类对象的函数,使用这个指针或者引用的一方的代码不必随着派生类的不同而改变,却可以达到执行最适合这个派生类的函数(也就是这个派生类自己的成员函数)的目的;另一方面可以使程序模块具有很好的可替换性,用一个派生类替换另一个派生类 , 程序的其它部分不需要做任何改动就可以正常运行而且发挥出新的派生类的特性 。PS:基类指针和引用可以用来访问派生类对象是把派生类对象看成基类对象 。理论基础是:一个派生类对象一定也是一个基类对象 。//动态联编与虚函数 。//动态绑定联编工作在程序运行时执行,在程序运行时才确定将要调用的函数 。虚函数是动态绑定的基础 。//是非静态的成员函数 。//在类的声明中,在函数原型之前写virtual 。//virtual 只用来说明类声明中的原型,不能用在函数实现时 。//具有继承性 , 基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数 。//本质:不是重载声明而是覆盖 。//调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数 。#include class b0 //基类b0声明 { public: virtual void display() //虚成员函数 { cout<<"b0::display()"5,涉及到派生类的头文件的包含在“单一继承”这种最普通的形式中,派生类仅有一个基类 。在类的层次设计中 , 可以发现一些普遍的特性,即派生类总是同基类有“kind of”关系 。另一个值得注意点是Book既是派生类(从PrintedDocument中派生),也是基类(PaperbackBook是从Book派生的) 。下面的例子是这种类层次的一个轮廓性的说明 。class PrintedDocument//成员表};//Book是从PrintedDocument中派生的class Book:public PrintedDocument//成员表};//PaperbackBook是从Book中派生class PaperbackBook: public Book//成员表};先给你说明一下 , 一般头文件只是用来声明函数或者类,但不定义他们 , 定义他们一般在源文件(cpp)中定义,因此如果只在头文件中声明函数或类的话 , 就没必要包含其他文件,也就是不需要使用#include语句 , 一般只有源文件中才会用到#include语句 。下面给你介绍一下具体的内容 。把程序写在多个文件中1、对于大型程序一般将一个程序写在多个文件中:一般把程序分成三部分,头文件和两个源文件,其中头文件包含类的声明或函数的声明 。其中一个源文件就包含这些类和函数的定义,而另一个源文件则是主程序 。2、将程序放在多个文件中的好处是比如有多个这样的程序需要在头文件中声明的这些函数,则只需在该程序中把这些头文件包含进来 。头文件和包含头文件定义的文件就组成了一个软件包 , 可用于各种程序中 。3、通常不应将函数声明和变量声明放在头文件中 。因为如果头文件包含一个函数定义,然后在同一程序的其他两个文件中包含了这个头文件,则同一程序中将包含同一函数的两个定义,除非是内联函数,否则就将出错 。4、头文件一般包含:函数原型,使用#define或const定义的符号常量,结构声明,类声明,模板声明 , 内联函数 。5、包含头文件时使用#include关见字,在#include后面文件名最好使用双引号不要使用尖括号 , 比如#include “eee.h”使用双引号和尖括号的区别是使用尖括号时编译器将首先在标准头文件中查找,而使用双引号则首先在当前工作目录或源代码目录查找 。6、不能在同一个文件中包含头文件两次 。一般不会犯这种错误 , 但是当使用包含了一个头文件的文件时有可能在不知情的情况下犯这个错误 。7、使用预处理器指令#ifndef来解决上面的问题 。语名#ifndef hyong…..#endi表示仅当以前没有使用预处理器编译指令#define定义的名称hyong时才处理#ifndef….#endif之间的语句 。#define通常创建符号常量,比如#define H 3;把常量3定义为名字H , 但只使用#define就能创建名称,比如#define H;就创建了一个名称H 。完整的#ifndef….#endif语句的例子如下:#ifndef HY#define HYvoid g(); #endif;该语句的执行顺序为:编译器首先遇到该头文件时,名称HY没有被定义 , 这时编译器就将查看#ifndef….#endif之间的内容,并读取到#define HY这一行 。如果在同一文件中遇到包含该头文件的代码时 , 编译器就知道HY这个名字已经被#define定义了,从而跳过#ifndef….#endif之间的内容 。注意这种方法并不能防止头文件被包含两次,而只是让他忽略除第一次包含之外的所有内容 。//将程序放在多个文件中的示例:以下示例有两个头文件hyong.h和hy.h其中hyong.h中只声明了一个函数 , 而hy.h中定义了一个函数(不推见这样做) 。有两个源文件,hyong.cpp中定义了hyong.h中声明的函数,而ff.cpp是主文件 。对于类与函数是类似的 。//头文件hyong.h的内容如下#ifndef HY //一般在头文件都都使用这种格式以防止头文件在同一文件中被包含两次 。语名#ifndef hyong…..#endi表示仅当以前没有使用预处理器编译指令#define定义的名称hyong时才处理#ifndef….#endif之间的语句 。#define HY//在这里用define定义一个名字HY,以便在下次访问到该头文件时,使该名字已经被定义 , 从而让程序跳过#ifndef….#endif间的语句 。void g();//在头文件中声明一个函数g();#endif//在头文件hy.h中定义函数,一般不允许这样做#include <iostream>using namespace std;void f()//定义头文件中声明的函数的源文件hyong.cpp的内容如下#include "stdafx.h"//注意:在VC++中所有的源文件中都要包含这条语句 。#include "hyong.h"//将头文件hyong.h包含进来,这里使用双引号,而不是引号,以便能更快地检查到该头文件中定义的名字#include “hy.h”//注意这里,在这个源文件中把头文件hy包含进来#include <iostream>using namespace std;void g()//主程序源文件ff.cpp的内容如下#include "stdafx.h"#include<iostream>#include "hyong.h"//注意,主程序和hyong.cpp的文件中都包含了这个头文件 。//#include “hy.h”//错误,在同一程序中的另一个文件hyong.cpp中已包含过该头文件,因为f函数是在hy.h这个头文件中定义的,在这里再包含头文件hy.h就会出现在同一程序中定义了两个f()函数的错误 。using namespace std;int main() {g();cout<<"p"<<endl; } //f();//对f函数的调用错误,因为f函数在头文件hy.h中定义,并且不能在主程序文件中再包含头文件hy.h , 在这里就会出现f是未标识的标识符的错误 。可以去掉 base.h 和 sellmanager.h 里 的头文件 。只编译 main 程序,另两文件会自己 include 进来 。所有c++头文件不用 .h 的 , 加 using namespace std;或者 所有c++头文件用 .h 的,不加 using namespace std;--------------------------------你的主程序有错smcout[] 数组/结构数组 没有声明void main() int i,j=0; smcout[i].display();}// 主程序在这里就结束了

    推荐阅读