资源描述
C++面向对象程序设计
试验指导书
江西理工大学电气工程和自动化学院
9月
目录
绪论 1
0.1 写本书目标 1
0.2 本书结构安排 1
0.3 怎样使用本书 2
试验一 C++程序运行环境和运行C++程序方法 3
1.1 试验目标 3
1.2试验内容和步骤 3
试验二 C++对C 扩充 5
2.1 试验目标 5
2.2 试验内容 5
2.2.1 程序阅读 5
2.2.2 程序设计 7
2.3 思索题 7
试验三 类和对象(一) 8
3.1 试验目标 8
3.2 试验内容 8
3.2.1程序阅读 8
3.2.2 程序设计 10
4.3思索题 10
试验四 类和对象(二) 11
4.1 试验目标 11
4.2 试验内容 11
4.2.1程序阅读 11
4.2.2 程序设计 12
4.3思索题 13
试验五 运算符重载 14
5.1 试验目标 14
5.2 试验内容 14
5.2.1程序阅读 14
5.2.2 程序设计 16
5.3思索题 17
试验六 派生和继承 18
6.1 试验目标 18
6.2 试验内容 18
6.2.1程序阅读 18
6.2.2 程序设计 20
试验七 派生和继承—多重派生 21
7.1 试验目标 21
7.2 试验内容 21
7.2.1程序阅读 21
7.2.2 程序设计 24
7.3思索题 24
试验八 C++程序、Windows程序和MFC程序 25
8.1 试验目标 25
8.2 试验内容 25
8.2.1 试验描述 25
8.2.2 试验步骤 26
8.2.3 试验结果分析 32
8.3思索题 34
试验九 简单单文档MFC程序设计 35
9.1 试验目标 35
9.2 试验内容 35
9.2.1 试验描述 35
9.2.2 试验步骤 36
9.2.3 试验结果 41
9.3思索题 42
试验十 简单对话框程序设计 43
10.1 试验目标 43
10.2 试验内容 43
10.2.1 试验描述 43
10.2.2 试验步骤 43
10.2.3 试验结果 50
10.3思索题 50
试验十一 简单数据库程序设计 52
11.1 试验目标 52
11.2 试验内容 52
11.2.1 试验描述 52
11.2.2 试验步骤 53
11.2.3 试验结果 60
11.3思索题 61
总结 62
参考书目 63
绪论
0.1 目标
面向对象程序设计语言是现今最流行编程语言之一,C++语言是作为最早最流行面向对象编程语言之一而发展起来。学好C++语言不仅能够从面向过程程序设计思想过渡到面向对象程序设计思想,而且能够为以后学习其它面向对象语言打下坚实基础,使得学习其它面向对象编程语言变得轻松、轻易。
试验作为学习C++语言不可缺乏一个步骤不仅能够加深学生对C++面向对象思想了解,同时能够提升学生动手编程能力,培养学生良好编码习惯。现在相关C++语言理论教材比较多,不过适合学生练习试验指导书却比较少,这严重影响了学生对C++这门课程学习。大多数情况下,学生学习C++语言之前全部刚刚学习过C语言程序设计这门课程,从编程环境到编程语言同时转换过来需要一定时间和合理指导,同时在学习C++理论知识过程中,学生极少也极难把C++程序设计和现在社会上比较流行基于VC6.0MFC程序设计联络起来,所以极难让学生在学习C++语言同时,提升学生基于VC6.0MFC程序设计能力。编写本书目标就是从以上几点来考虑,首先要把学生从以前编程环境中脱离出来,然后循序渐进地介绍新编程环境新知识点,同时把C++语法结构融入到基于VC6.0MFC程序设计中去,从而实现学生轻松掌握C++这门程序设计语言和习惯编程环境和了解C++语法和MFC之间关系目标,从而提升学生程序设计能力和学生程序设计成就感。
0.2 结构安排
试验课程安排离不开理论课程学习,本书编排以知识点为关键,理论教材蓝本为《C++面向对象程序设计教程》(第2版)陈维兴 林小茶编著,清华大学出版社出版。经过为不一样知识点设计对应试验程序,来达成学生练习和了解C++语言面向对象思想目标,同时本书还设计了部分程序设计课后练习题,设计本部分有三个目标:一个是有些课堂练习中没有措施练习到知识点将在这部分表现,指导老师能够依据需要来增删课堂讲解内容;另一个是为一部分有能力有爱好深入学习C++程序设计同学提供部分练习题,从而提升这部分学生程序设计能力;第三就是避免有些学生在做试验过程中盲目根据指导书中步骤一步一步地不加思索地写程序,学生要回复这些问题,就必需看懂这些程序中隐含知识点,从而达成理论知识和实践知识愈加好地结合。
对于课堂练习,本书共安排了11个试验,共24个课时,试验安排以下:
试验一 C++程序运行环境和运行C++程序方法 (2课时)
试验二 C++对C 扩充 (2课时)
试验三 类和对象(一) (2课时)
试验四 类和对象(二) (2课时)
试验五 试验五 运算符重载 (2课时)
试验六 派生和继承 (2课时)
试验七 派生和继承—多重派生 (2课时)
试验八 试验八 C++程序、Windows程序和MFC程序 (2课时)
试验九 简单单文档MFC程序设计 (2课时)
试验十 简单对话框程序设计 (2课时)
试验十一 简单数据库程序设计 (4课时)
0.3 怎样使用本书
面向对象程序设计语言出现目标就是为了设计大型软件系统,不过教学过程中极难让学生在课堂上实现一个大型(甚至是成型)系统,所以作为老师应该引导学生在实现一个简单功效性程序同时让学生思索,思索怎样把这个地方技术实现到一个复杂应用系统中去;另外老师要充足利用本书中第二部分练习,引导学生去思索怎样利用C++相关技术从头到尾设计一个含有实用价值应用程序。
作为学生假如只是简单地根据本书中提供步骤一步一步完成某一个程序,而不去思索为何要这么做话,那么学生能学到知识也仅仅是C++语法而已,并不能真正了解C++面向对象思想,最终不能设计出好程序来。所以学生不仅要全部实现本书中课堂练习,得出正确结果,而且在完成了程序后还要思索本程序为何要这么设计,假如换成其它程序设计语言会怎么实现,只有这么才能够真正了解C++精髓,从而掌握C++。
另外学生在学习最终四个试验时候一定不要忘记前面C++语法知识,能否合理地将C++三大特征利用到MFC程序设计中是提升程序运行效率,存放效率和程序封装性一个最有效手段。
试验一 C++程序运行环境和运行C++程序方法
1.1 试验目标
(1)了解所用计算机系统基础操作方法, 学会独立使用该系统。
(2)了解在该系统上怎样编辑、编译、连接和运行一个C++程序e
(3)经过运行简单C++程序, 初步了解C++源程序结构和特点。
应学会在一个以上编译环境下运行C++程序,提议学习并掌握Visual C++ 6.0使用方法。
1.2试验内容和步骤
(1) 检验所用计算机系统是否已安装了C++编译系统, 并确定它所在子目录。
(2) 在Visual C++环境下编译和运行C ++程序。
在第一次上机时, 按以下步骤建立和运行C++程序:
① 优异入V i sual C++ 6 . 0 环境。
② 根据《上机指导》第9章介绍方法, 在自己指定子目录建立一个名为test. cpp 新文件(此时还未向文件输入内容) 。
③ 从键盘输入以下程序(第l 章第4题)
int main();
{
int a,b;
c=a+b;
cout>>” a+b=”>>a+b;
}
④ 选择Build→ Compile test.cpp 命令, 对此源程序进行编译。观察和分析编译信息。
⑤ 依据编译信息指犯错误,修改程序。再进行编译,假如还有错, 再反复此过
程,直到编译不犯错为止。
⑥ 选择Build→Build test.exe 命令,对程序进行连接, 假如不出销, 就会生成可实施程序test.exe。
⑦ 选择Build- Execute test. exe 命令, 实施可实施程序test. exe。观察屏幕改变。
在输出窗口应显示程序运行结果。
⑧ 分析结果是否正确, 假如不正确或认为输出格式不理想,能够修改程序,然后重新实施以上④至⑧步骤。
另外,还可利用已经有源程序建立一个新程序。因为刚才已建立了一个名为test. cpp源程序, 能够以它为基础建立一个新程序。这么更方便些。按以下步骤:
① 经过“资源管理器”或“我电脑”找到已经有源程序test. cpp。
② 双击"test. cpp " 图标, 进入Visual C ++集成环境, 打开test. cpp 。
③ 在test. cpp 基础上将源程序修改为以下内容(第l 章第5 题) ,
#include <iostream>
using namespace std;
int main( )
{
int a,b;
c=add(a,b)
cout<<”a+b=”<<c<<endl;
return 0;
}
int add(int x,int y);
{
z =x+y;
return(z);
}
④选择File-Save as 命令,用新文件名other.cpp 保留。此时, other.cpp 和tesl. cpp在同一子目录下。
⑤对新文件other. cpp 进行编译、连接和运行。步骤同前。
(3) 请思索以下问题,并上机进行试验。
将本试验中第2 个程序作以下改动:
(a) 将程序第1,2 行改为下面一行
#include <iostream.h>
(b) 将第3 行int main ()改为
void main()
( c ) 删去main 函数中
retum 0;
再运行此程序。并对此作分析,得到必需结论。
(4) 输入两个整数,将它们由大到小次序输出(本题是<< C ++面向对象程序设计》第l章习题第8题) 。
①使用指针方法。
②使用变量引用。
比较这两种方法特点和使用方法。
试验二 C++对C 扩充
2.1 试验目标
1.深入了解和熟悉VC++6.0开发环境,学会在VC++6.0环境下调试程序;
2.熟悉C++中简单标准输入输出函数实用;
3.了解const修饰符作用,并学会应用const修饰符;
4.了解内置(内联)函数优缺点并学会使用内置函数;
5.了解和使用函数重载和带默认参数函数;
6.使用new和delete进行动态内存管理;
7.了解和使用引用。
2.2 试验内容
2.2.1 程序阅读
1.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream >
using namespace std;
int max_def(int x, int y)
{
return (x>y?x:y);
}
int max_def(int x, int y, int z)
{
int temp = 0;
return (temp=(x>y?x:y))>z?temp:z;
}
double max_def(double x, double y)
{
return (x>y?x:y);
}
int main()
{
int x1 = 0;
int x2 = 0;
double d1 = 0.0;
double d2 = 0.0;
x1 = max_def(5,6);
x2 = max_def(2,3,4);
d1 = max_def(2.1,5.6);
d2 = max_def(12.3,3.4,7.8);-----------------------------------------------------①
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
cout<<"d1="<<d1<<endl;
cout<<"d2="<<d2<<endl;--------------------------------------------------------②
return 1;
}
问题一:上述程序输出结果是什么?
答:
问题二:哪些情况能够参与函数重载?
答:
问题三:①处调用是哪个函数?
答:
问题四:②处输出结果为何是d2=12,而不是d2=12.3?
答:
2.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
int main()
{
int *p1 = new int; -----------------------------------------------------①
int *p2 = new int(0); -----------------------------------------------------②
char *p3 = new char[64]; -----------------------------------------------------③
return 1;
}
问题一:①、②、③处动态申请内存分别代表什么不一样意思?
答:
问题二:该程序存在什么隐患?更正该程序使隐患消除。
答:
3.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int i = 5;
int j = 10;
cout<<"Before swap: i="<<i<<",j="<<j<<endl;
swap(i,j); -----------------------------------------------------①
cout<<"After the first swap: i="<<i<<",j="<<j<<endl;
swap(&i,&j); -----------------------------------------------------②
cout<<"After the second swap: i="<<i<<",j="<<j<<endl;
return 1;
}
问题一:上述程序输出结果是什么?
答:
问题二:①处函数调用后并不能实现两个数交换,而②处却能够,为何?
答:
问题三:②处调用是哪个重载函数?
答:
2.2.2 程序设计
1.使用函数重载方法定义两个重名函数,分别求出整形数平面间两点间距离和双精度平面间两点间距离,假如没有输入第二点坐标则默认为圆点(0,0)。
2.设计一个函数:exchange(float x, float y, float z),当调用exchange(a,b,c)时,将a内容赋值给b,b内容赋值给c,c内容赋值给a,要求采取引用方法来实现。
2.3 思索题
1.自己设计一个程序,测试const三种使用方法:指向常量指针,常指针,指向常量常指针。
2.编写一个函数,实现两个字符串变量交换,要求参数用引用。
试验三 类和对象(一)
3.1 试验目标
1.类定义;
2.类对象使用;
3.类组员变量定义和使用;
4.类组员函数定义和使用;
5.了解类作用域;
6.了解类申明;
7.了解类中private和public权限申明依据。
3.2 试验内容
3.2.1程序阅读
1.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
class CDate
{
void Set(int m, int d, int y )
{
month = m ;
day = d ;
year = y ;
}
int IsLeapYear()
{
return (year%4 == 0 && year%100 != 0)||(year%400 == 0);
}
public:
void Print()
{
cout<<month<<"/"<<day<<"/"<<year<<endl;
}
private:
int month; int day; int year;
};
void main()
{
CDate a; -----------------------------------------------------①
a.Set(10,15,) ;
a.Print();
}
问题一:以上程序编译能经过吗,为何,应该怎样更正?
答:
问题二:类CDate中分别有哪些组员函数和组员变量,它们分别属于哪种访问权限?
答:
问题三:①处语句意思是什么?
答:
2.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
int month;//全局变量
int day;
int year;
void Set(int m,int d,int y) -----------------------------------------------------a
{
::month=m; -----------------------------------------------------①
::day=d;
::year=y;
}
class CDate
{
public:
void Set(int m,int d,int y) -----------------------------------------------------b
{
::Set(m,d,y); -----------------------------------------------------②
}
void Print()
{
cout<<month<<"/"<<day<<"/"<<year<<endl;
}
private:
int month; //组员变量
int day;
int year;
};
void main()
{
CDate a;
a.Set(10,15,) ;
a.Print();
}
问题一:①处是在给组员变量赋值,还是在给全局变量赋值,假如去掉域作用符::,程序是否还能正确运行?
答:
问题二:②处调用哪个函数,假如去掉域作用符::,程序是否还能正确运行?
答:
问题三:该程序输出结果是什么,试解释该输出结果。
答:
3.2.2 程序设计
1.需要求3 个长方柱体积,请编一个基于对象程序。数据组员包含length(长)、width (宽) 、height (高)。要求用组员函数实现以下功效
① 由键盘分别输入3 个长方柱长、宽、高:
② 计算长方柱体积:
③ 输出3 个长方柱体积。
编程序,上机调试并运行。本题是<<C++面向对象程序设计》第2 章第6 题。
4.3思索题
1.试设计一个复数类,该类有实部和虚部两个组员数据,组员数据采取私有访问权限,同时该类有两个共有组员函数,分别用来设置组员数据和输出组员数据,在主函数中分别采取对象方法,指针方法和引用方法来调用该类公有函数设置和输出组员数据。
试验四 类和对象(二)
4.1 试验目标
1.了解掌握this指针作用和使用方法;
2.了解掌握结构函数定义和作用;
3.掌握结构函数使用;
4.了解掌握拷贝结构函数定义和使用;
5.了解掌握结构函数重载;
6.了解掌握析构函数定义和使用。
4.2 试验内容
4.2.1程序阅读
1.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
class CPoint
{
public:
void Set(int x,int y);
void Print();
private:
int x;
int y;
};
void CPoint::Set(int x,int y)
{
x = x;
y = y;
}
void CPoint::Print()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
void main()
{
CPoint pt;
pt.Set(10,20);
pt.Print();
}
问题一:以上程序编译能经过吗,试解释该程序?
答:
问题二:以上程序运行结构是否正确,假如不正确,试分析为何,应该怎样更正?
答:
2.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
class CPerson
{
public:
void Print();
private:
CPerson();
private:
int age;
char *name;
};
CPerson::CPerson()
{
}
void CPerson::Print()
{
cout<<"name="<<name<<",age="<<age<<endl;
}
void main()
{
CPerson ps(23,"张三");
ps.Print();
}
问题一:以上程序存在三处大错误,在不改变主函数内容前提下,试更正该程序。
答:
4.2.2 程序设计
1.设计实现一个CPoint类,满足以下要求:
a. 该类包含两个整型组员变量x(横坐标)和y(纵坐标),和一个输出函数Print()用来输出横坐标和纵坐标,要求不能够在类外部直接访问组员变量;
b.能够采取没有参数结构函数初始化对象,此时组员变量采取默认值0;
c.能够采取直接输入参数方法来初始化该类组员变量;
d.能够采取其它CPoint对象来初始化该类组员变量;
e.设计一个主函数来测试以上功效。
4.3思索题
1.设计一个CStudent(学生)类,并使CStudent类含有以下特点:
a.该类含有学生姓名、学号、程序设计、信号处理、数据结构三门课程成绩;
b.学生全部信息由键盘输入,以提升程序适应性;
c.经过组员函数统计学生平均成绩,当课程数量增加时,组员函数无须修改仍能够求取平均成绩;
d.输出学生基础信息、各科成绩和平均成绩;
e.学生对象定义采取对象数组实现;
f.统计不及格学生人数。
试验五 运算符重载
5.1 试验目标
(1) 深入了解运算符重载概念和使用方法。
(2) 掌握多个常见运算符重载方法。
(3) 了解转换结构函数使用方法。
(4) 了解在Vi s ual C++ 6.0 环境下进行运算符重载要注意问题。
5.2 试验内容
5.2.1程序阅读
1.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
class CComplex
{
public:
CComplex()
{
real = 0;
imag = 0;
}
CComplex(int x,int y)
{
real = x;
imag = y;
}
int real;
int imag;
CComplex operator + (CComplex obj1)-----------------------------------------------①
{
CComplex obj2(real + obj1.real, imag + obj1.imag);
return obj2;
}
};
void main()
{
CComplex obj1(100,30);
CComplex obj2(20, 30);
CComplex obj;
obj = obj1+obj2; ------------------------------------------------------------------②
cout << obj.real <<endl;
cout << obj.imag << endl;
}
问题一:①处运算符重载,为何该函数返回值要设计成CComplex类型?
答:
问题二:②处运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,不过为何CComplex类中运算符重载函数只设计了一个参数?
答:
2.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
class CComplex
{
public:
CComplex()
{
real = 0.0;
imag = 0.0;
}
CComplex(float x, float y)
{
real = x;
imag = y;
}
CComplex operator + (CComplex &obj1, CComplex &obj2)
{
CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag);
return obj3;
}
CComplex &operator++(CComplex &obj)
{
obj.real += 1;
obj.imag +=1;
return obj;
}
void print()
{
cout<<real<<"+"<<imag<<"i"<<endl;
}
private:
float real;
float imag;
};
CComplex &operator--(CComplex &x)
{
x.real -= 1;
x.imag -= 1;
return x;
}
void main()
{
CComplex obj1(2.1,3.2);
CComplex obj2(3.6,2.5);
cout<<"obj1=";
obj1.print();
cout<<"obj2=";
obj2.print();
CComplex obj3 = obj1 + obj2;
cout<<"befor++, obj3=";
obj3.print();
++obj3;
cout<<"after++, obj3=";
obj3.print();
--obj3;
cout<<"after--, obj3=";
obj3.print();
CComplex obj4 = ++obj3;
cout<<"obj4=";
obj4.print();
}
问题一:以上程序中三个运算符重载全部有错误,试更正过来,并分析该程序输出结果。
答:
5.2.2 程序设计
1. 在以上复数类基础上,增加重载运算符乘“*”、除“/”,实现复数乘除运算。
2. 有两个矩阵a 和b ,均为2 行3 列。求两个矩阵之和。重载运算符" + " ,使之能用于矩阵相加. 如c=a+b, 本题是< C++面向对象程序设计》第4 章第4 题。
5.3思索题
1.定义CPoint类,有两个组员变量:横坐标(x)和纵坐标(y),对CPoint类重载“++”(自增运算符)、“--”(自减运算符),实现对坐标值改变。
试验六 派生和继承
6.1 试验目标
1.了解继承含义和申明;
2.了解共有派生、私有派生和保护派生含义和使用;
3.了解单派生类中结构函数和析构函数调用次序。
6.2 试验内容
6.2.1程序阅读
1.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
class CBase
{
public:
CBase(int a)
:a(a)
{
}
protected:
void print()
{
cout<<"a="<<a<<endl;
}
private:
int a;
};
class CDerive : public CBase
{
public:
void print()
{
CBase::print();
cout<<"b="<<b<<endl;
}
private:
int b;
};
void main()
{
CDerive d;
d.print();
CBase b;
b.print();
}
问题一:以上程序有两大错误,试指出来,并更正之?
答:
2.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include <iostream>
using namespace std;
class CBase
{
public:
CBase(int a)
:a(a)
{
cout<<"base structure"<<endl;
}
~CBase()
{
cout<<"base destructure"<<endl;
}
void print()
{
cout<<"a="<<a<<endl;
}
protected:
int a;
};
class CDerive : public CBase
{
public:
CDerive(int a, int b,int c)
:CBase(a),b(b),c(c)
{
cout<<"derive structure"<<endl;
}
~CDerive()
{
cout<<"derive destructure"<<endl;
}
void print()
{
CBase::print();
cout<<"b.a="<<b.a<<endl;
cout<<"c="<<c<<endl;
}
private:
CBase b;
int c;
};
void main()
{
CDerive d(1,2,3); -----------------------------------------------------①
d.print();
}
问题一:以上程序输出结果是什么,说明为何?
答:
问题二:①处语句实施完后,d.b.a值为多少?
答:
6.2.2 程序设计
1.定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类含有以下特点:
a.CLine类含有计算直线长度和斜率组员函数;
b.CCircle类含有计算圆面积组员函数。
试验七 派生和继承—多重派生
7.1 试验目标
1.了解多重派生定义;
2.了解多重派生中结构函数和析构函数调用次序;
3.了解多重派生中虚拟基类作用;
7.2 试验内容
7.2.1程序阅读
1.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
class CBase1
{
public:
CBase1(int a)
:a(a)
{
cout<<"base1 structure..."<<endl;
}
~CBase1()
{
cout<<"base1 destructure..."<<endl;
}
void print()
{
cout<<"a="<<a<<endl;
}
protected:
int a;
};
class CBase2
{
public:
CBase2(int b)
:b(b)
{
cout<<"base2 structure..."<<endl;
}
~CBase2()
{
cout<<"base2 destructure..."<<endl;
}
void print()
{
cout<<"b="<<b<<endl;
}
protected:
int b;
};
class CDerive : public CBase1, public CBase2
{
public:
CDerive()
{
cout<<"derive structure..."<<endl;
}
~CDerive()
{
cout<<"derive destructure..."<<endl;
}
void print()
{
CBase1::print();
CBase2::print();
b1.print();
b2.print();
cout<<"c="<<c<<endl;
}
private:
CBase1 b1;
CBase2 b2;
int c;
};
void main()
{
CDerive d;
d.print();
}
问题一:更正以上程序中存在错误,并分析该程序输出结果。
2.了解下面程序,并在VC++6.0下运行查看结果,回复程序后面问题。
#include "iostream.h"
class CBase
{
public:
CBase(int a)
:a(a)
{
}
int a;
};
class CDerive1 : pu
展开阅读全文