(1) 在Intset中再增加一个成员函数,将对象的整型数据拷贝的到floatset的对象
中此成员函数的原型为:
void settofloat(floatset &set); //形参为拷贝的目标对象
(2) 办法需要调用函数,程序的开销较大,可以定义一个友元函数来实现上述的
功能。
请分别完成两个程序。
(7) 分析以下程序的功能,把程序用三种方法(公有数据成员、友元、用成员函数访问私有数据成员)补充完整,实现对对象peppy的成员 #include
void SetValue(Animal&, int); void SetValue(Animal&, int, int);
class Animal { public:
Animal():itsWeight(0),itsAge(0){}
void show(){cout< void SetValue(Animal& ta, int tw) { // 设置itsWeight值 } void SetValue(Animal& ta, int tw, int tn) { // 设置itsWeight和itsAge值 } int main() { Animal peppy; SetValue(peppy, 5); peppy.show(); SetValue(peppy, 7, 9); peppy.show(); return 0; } (8) 设计一个整数链表类,满足栈操作。即,总在链表首插入结点,总在链表首取出(删除)结点。类中需有记录结点个数的数据成员。如果链表为空,而要做取出结点操作,则类必须给出错误信息。 编写应用程序,取100次随机数(范围10-200),每取到比前一个随机数大时,放入链表中,否则,略去。然后逐个取出,求其和。 用堆分配方法逐个产生满足条件的结点,插入链表中。每当从链表中取出一个结点时,要及时将结点删除。 求和工作不要在链表类中完成,以使该链表类具有通用性。 3、思考题: 结合编程实践回答下列的问题。 (1) 什么是this指针,它的主要作用是什么? (2) 总结静态成员的特点。 实验4 派生与继承 1、 实验目的和要求: 此实验用两个单元的时间完成,是一个综合性的实验,要求编写的程序涉及到C++的许 多知识点,如类的定义,动态分配内存,构造函数,派生,虚基类等。实验内容给出的是一个完整的程序,4个题目实际是类等级。同学也可以在此基础上发挥增加新的内容。 2、 实验内容: 1. 定义一个基类MyArray,基类中可以存放一组数组。 Class Myarray { int *alist; int length; public: Myarray( int leng); ~myarray(); void input(); void display(); }; 编写构造函数,析构函数及其它函数,实现动态分配内存,释放内存和数据输入输出等功能。并进行调试。 2.定义一个类averarray继承自myarray,在类中求数组的平均值,并输出。进行调试。 3.定义一个类revarray继承自 myarray, 使数组按反序存放,并输出。进行调试。 4. 定义一个类Nawarray继承自averarray和revarray。在继承过程中声明为虚基类,体会 虚基类在解决二义性中的问题中的作用。调试中可以试一试不用虚基类出现的问题。 5. 读程序,回答问题 #include }; void f1(); A() {i1=10;j1=11;} int j1; int i1; protected: private: class B:private A { public: }; class C: public B { public: }; 回答下列问题: (1) 派生类B中成员函数f2()能否访问基类A中的成员f1()、i1和j1? (2) 派生类B的对象b能否访问基类A中的成员f1()、i1和j1? (3) 派生类C中成员函数f3()能否访问直接基类B中的成员f2()、i2和j2?能否访 问间接基类A中的成员f1()、j1和i1? void f3(); C() {i3=30;j3=31;} int j3; int i3; void f2(); B() {i2=20;j2=21;} int j2; int i2; protected: private: protected: private: (4) 派生类C的对象c能否访问直接基类B中的成员f2()、i2和j2?能否访问间接 基类A中的成员f1()、j1和i1? 6. 编写一个程序,实现字符串操作: 一个简单串类string,包含输入字符串、返回字符串长度及内容等功能; 另有一个具有编辑功能的串类edit_string,它继承string类,在其中设置一个光标,使 其能支持在光标处的插入、替换和删除等编辑功能。