编程作业: 编程作业—类和对象

3w6:第三周程序填空题1

描述

下面程序输出的结果是:

4,6

请填空:

#include <iostream>
using namespace std;
class A {
        int val;
    public:
        A(int n) { val = n; }
        int GetVal() { return val; }
};
class B: public A {
    private:
        int val;
    public:
        B(int n):
// 在此处补充你的代码
        { }
        int GetVal() { return val; }
};
int main() {
    B b1(2);
    cout << b1.GetVal() << "," << b1.A::GetVal() << endl;
    return 0;
}

输入无输出4,6样例输入

样例输出

4,6

Code:

#include <iostream>
using namespace std;
class A {
        int val;
    public:
        A(int n) { val = n; }
        int GetVal() { return val; }
};
class B: public A {
    private:
        int val;
    public:
        B(int n):
// 在此处补充你的代码
        A(n*3), val(n*2) {}
        int GetVal() { return val; }
};
int main() {
    B b1(2);
    cout << b1.GetVal() << "," << b1.A::GetVal() << endl;
    return 0;
}

  

3w7:第三周程序填空题2

描述

下面程序输出的结果是:

0

5

请填空:

#include <iostream>
using namespace std;
class A {
public:
    int val;
// 在此处补充你的代码
};
main()  {
    A a;
    cout << a.val << endl;
    a.GetObj() = 5;
    cout << a.val << endl;
}

输入无输出0
5样例输入

样例输出

0
5

提示所缺代码具有如下形式:

    A(_________________ ){ val = n; }
________________ GetObj() {
return _________________;
}

Code:

#include <iostream>
using namespace std;
class A {
public:
    int val;
// 在此处补充你的代码
    A() {
        val = 0;
    }
    A(int v) {
        val = v;
    }
    A& GetObj() {
        return *this;
    }
};
main()  {
    A a;
    cout << a.val << endl;
    a.GetObj() = 5;
    cout << a.val << endl;
}

 

3w8:第三周程序填空题3

描述

下面程序的输出是:

10

请补足Sample类的成员函数。不能增加成员变量。

#include <iostream>
using namespace std;
class Sample{
public:
    int v;
    Sample(int n):v(n) { }
// 在此处补充你的代码
};
int main() {
    Sample a(5);
    Sample b = a;
    cout << b.v;
    return 0;
}

输入无输出10样例输入

样例输出

10

Code:

#include <iostream>
using namespace std;
class Sample{
public:
    int v;
    Sample(int n):v(n) { }
// 在此处补充你的代码
    Sample(Sample& s) {
        v = 10;
    }
};
int main() {
    Sample a(5);
    Sample b = a;
    cout << b.v;
    return 0;
}

  

Analysis:[https://segmentfault.com/a/1190000005852333]

在代码 Sample b = a;中,这里的=初始化,而不是赋值,在用同类型的对象对对象初始化的时候会调用复制构造函数。形如Sample(Sample& s),以同类型的引用作为构造函数的参数的构造函数是复制构造函数。在 Sample b = a;中,a是复制构造函数的参数,调用构造函数的对象的v的值被赋值为10。

调用复制构造函数的三种情况

1.初始化:当用一个对象去初始化同类的另一个对象时
2.函数参数:如果某函数有一个参数是类A的对象,那么该函数被调用时,类A的复制构造函数被调用
3.函数返回值:如果函数的返回值是类A的对象时,则函数返回时,A的复制构造函数被调用

 

3w9:第三周程序填空题4

描述

下面程序的输出结果是:

5,5

5,5

请填空:

#include <iostream>
using namespace std;
class Base {
public:
    int k;
    Base(int n):k(n) { }
};
class Big  {
public:
    int v; Base b;
// 在此处补充你的代码
};
int main()  {
    Big a1(5);    Big a2 = a1;
    cout << a1.v << "," << a1.b.k << endl;
    cout << a2.v << "," << a2.b.k << endl;
    return 0;
}

输入无输出5,5
5,5样例输入

样例输出

5,5
5,5

提示所缺代码具有如下形式:

    Big ________________{ }
Big ________________{ }

Code:

#include <iostream>
using namespace std;
class Base {
public:
    int k;
    Base(int n):k(n) { }
};
class Big  {
public:
    int v; Base b;
// 在此处补充你的代码
    Big(int a):v(a), b(a){}
};
int main()  {
    Big a1(5);    Big a2 = a1;
    cout << a1.v << "," << a1.b.k << endl;
    cout << a2.v << "," << a2.b.k << endl;
    return 0;
}

  

Analysis: [https://segmentfault.com/a/1190000005852395]

Big类是一个封闭类,在生成Big类对象之前,会先生成Base类的对象(调用Base类的构造函数生成Big类的成员对象b),然后再调用Big类的构造函数,生成Big类对象a1.
代码Big a2 = a1;中,调用Big类默认的复制构造函数,以a1为默认复制构造函数的参数,生成对象a2.

 

posted @ 2018-12-18 12:44  Veritas_des_Liberty  阅读(1134)  评论(0编辑  收藏  举报