C++程序设计,课程代码4737,课后习题5答案

2018年3月5日17:09:14 6 1,916 views

习题5

一、填空题

  1. 将关键词const写在函数参数列表之后,函数体之前,说明该函数是  常  成员函数。
  2. 一个const对象只能访问  常  成员函数。
  3. 在函数体之前加   const    关键字可以防止覆盖函数改变数据成员的值。

二、单项选择题

  1. 简单成员函数的声明一般不含关键字(B )。
    A. double  B. static  C. float  D. int
  2. 已知:print()函数是一个类的常成员函数,它无返回值,下列表示中正确的是( A)。
    A. void print() const  B. const void print()  C. void const print()  D. void print(const)
  3. 下列各类函数中,不是类的成员函数的是(C )。
    A. 构造函数  B. 析构函数  C. 友元函数  D. 复制初始化构造函数
  4. 对友元函数描述正确的是(A )。
    A. 一个类的友元函数是在该类中说明的一个函数  B. 一个类的友元函数是该类的一个成员
    C. 友元函数只允许访问该类对象的私有成员  D. 友元函数不允许访问该类的私有成员

三、改错题

  1. 改正下面类定义的错误并说明理由。
    class base {
            int number;
            static int a;
        public:
            void set(int i, int j);
            static int geta() { return a; }
            static int getn() { return number; }
            void show() { cout << number << "," << a << endl; }
    };

    答:static int getn(){return number;}错误
    静态成员函数,只允许访问静态成员变量,number不是静态成员变量。

  2. 假设一个正确定义的类Test,改正主程序中的错误。
    void main() {
        test *two[2] = { test(4, 5), test(6, 8) };
        for(i = 0 ; i < 2 ; i++)
            delete two[i];
    }

    答:delete two[i] 错误;
    在栈中创建的指针对象系统会自动回收。

四、完成程序题

完成下面程序并给出运行结果。

#include <iostream>
using namespace std;
class test {
        int X:
    public:
        test(int a) { X = a; }
        int GetX() { return X; }
};
void main() {
    int i;//填空1,定义变量i
    test *p, a[2][3] = { {1, 2, 3}, {4, 5, 6} };
    for( i=0,p=a[0][0]; i <= 6; p++) {//填空二,初始化变量i,p
        if((p - a[0]) % 3 == 0) cout << endl;
        cout << p->GetX() << " ";
    }
}

1 2 3

4 5 6

五、编程题

  1. 声明复数的类complex,使用友元函数add实现复数的加法。
    #include <iostream>
    using namespace std;
    class Complex
    {
    private:
    	double real,image;
    public:
    	Complex();
    	Complex(double a,double b){
    		real = a;
    		image = b;
    	}
    	void setRI(double a,double b){
    		real = a;
    		image = b;
    	}
    	double getReal(){
    		return real;
    	}
    	double getImage(){
    		return image;
    	}
    	void print(){
    		if(image>0){
    			cout << "复数:" << real << "+" << image << endl;
    		}else{
    			cout << "复数:" << real << "-" << image << endl;
    		}
    	}
    	friend Complex add(Complex,Complex);
    };
    Complex add(Complex c1,Complex c2){
    	Complex c3;
    	c3.real = c1.real + c2.real;
    	c3.image = c1.image + c2.image;
    	return c3;
    }
    int main(int argc, char const *argv[])
    {
    	Complex c1(22,0.888),c2,c3;
    	c2.setRI(90,122.222);
    	c3 = add(c1,c2);
    	cout << "复数一:" ; c1.print();
    	cout << "复数二:" ; c2.print();
    	cout << "相加后:" ; c3.print();
    	return 0;
    }

     

  2. 设计一个使用常量成员函数的示范程序。
    #include <iostream>
    using namespace std;
    class Base
    {
    	double x,y;
    	const double p;
    public:
    	Base(double m,double n,double d):p(d){
    		x = m;y=n;
    	}
    	void Show();
    	void Show() const;	
    };
    void Base::Show(){
    	cout << x << "," << y << " p=" << p << endl;
    }
    void Base::Show() const{
    	cout << x << "," << y << " const p=" << p << endl;
    }
    int main()
    {
    	Base a(8.9,2.5,3.1416);
    	const Base b(2.5,8.9,3.14);
    	b.Show();
    	a.Show();
    	return 0;
    }
    

     

  3. 编写一个程序,该程序建立一个动态数组,为动态数组的元素赋值,显示动态数组的值并删除动态数组。
    #include <iostream>
    using namespace std;
    int main(int argc, char const *argv[])
    {
    	cout << "请输入数组的大小:";
    	int n,temp;
    	cin >> n;
    	double *arr = new double[n];
    	for(int i=0;i<n;i++){
    		cout << "arr[" << i << "]=";
    		cin >> temp;
    		*(arr+i) = temp; 
    	}
    	cout << "数组元素如下:" << endl;
    	for(int i=0;i<n;i++){
    		cout << "arr["<< i <<"]=" << arr[i] << endl;
    	}
    	delete [] arr;
    	return 0;
    }

     

  4. 定义一个Dog类,它用静态数据成员Dogs记录Dog的个体数目。静态成员函数GetDogs用来存取Dogs。设计并测试这个类。
    #include <iostream>
    using namespace std;
    class Dog
    {
    	static int Dogs;
    public:
    	Dog(){
    		Dogs++;
    	}
    	int GetDogs(){
    		return Dogs;
    	}
    };
    int Dog::Dogs = 0;
    int main(int argc, char const *argv[])
    {
    	Dog d[5],d1;
    	cout << d1.GetDogs() << endl;
    	return 0;
    }

     

历史上的今天:


欢迎来到菜鸟头头的个人博客
本文章百度已收录,若发现本站有任何侵犯您利益的内容,请及时邮件或留言联系,我会第一时间删除所有相关内容。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:6   其中:访客  3   博主  3

    • avatar 软件开发 1

      最近要被c++洗脑了

        • avatar 头头 Admin

          @软件开发 看了c++虽然复杂,我像设计的功能应该很丰富。

        • avatar 玩游戏赚钱 2

          每天学习还要把这些再发到博客,辛苦了