HW 8

Posted baihualiaoluan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HW 8相关的知识,希望对你有一定的参考价值。

水。。。。。。。。

Problem A: 第一个类

技术图片

int main()
{
    Thing A("Car");
    string str;
    cin>>str;
    Thing B(str);
    return 0;
}

考点:类的基本使用

#include <bits/stdc++.h>
using namespace std;
class Thing
{
    string name;
public:
    Thing(string _name):name(_name){cout  << "Construct a thing " << name << endl; }
    Thing(const Thing &b):name(b.name){cout  << "Construct a thing " << name << endl;};
~Thing()
{
    cout  << "Destroy a thing " << name << endl;
}
};

Problem B: 还会用继承吗?

技术图片

main函数:

int main()
{
    int cases, data1, data2;
    cin>>cases;
    for (int i = 0; i < cases; i++)
    {
        cin>>data1>>data2;
        Base base1(data1), base2(base1);
 
        Derived derived1(data1, data2), derived2(derived1);
    }
}

考点:类的继承,派生类拷贝构造函数的初始化

AC代码:

#include <bits/stdc++.h>
using namespace std;
class Base
{
    int num;
public:
    Base(){};
    Base(int _num):num(_num)
    {
        cout << "Base = " << num << " is created." << endl;
    }
    Base(const Base &b):num(b.num)
    {
        cout << "Base = " << num << " is copied." << endl;
    }
    ~Base()
    {
        cout << "Base = " << num << " is erased." << endl;
    }
};
class Derived:public Base
{
    int n;
public:
    Derived(int _num,int _n):Base(_num),n(_n){
    cout << "Derived = " << n << " is created." << endl;
    }
    Derived(const Derived&b):Base(b),n(b.n)
    {
 
        cout << "Derived = " << n << " is copied." << endl;
    }
    ~Derived()
    {
        cout << "Derived = " << n << " is erased." << endl;
    }
};
 

Problem C: 一切皆对象

技术图片

main 函数:

int main()
{
    string name;
    Thing Thing1, Thing2(Thing1);
    cin>>name;
    Thing Thing3(name);
    Thing Thing4(Thing3);
    return 0;
}

细节题,需要特判串为空的情况。

考点:类的基本使用

AC代码:

#include <bits/stdc++.h>
using namespace std;
class Thing
{
    string name;
public:
    Thing()
    {
        cout << "A thing without name is created!" << endl;
    }
    Thing(string _name):name(_name)
    {
        if(name=="")
            cout << "A thing without name is created!" << endl;
        else
        cout << "A thing named by " << name << " is created!" << endl;
    }
    Thing(const Thing&b):name(b.name)
    {
        if(name=="")
            cout << "A thing without name is copied!" << endl;
        else
        cout << "A thing named by " << name << " is copied!" << endl;
    }
    ~Thing()
    {
        if(name=="")
            cout << "A thing without name is erased!" << endl;
        else
        cout << "A thing named by " << name << " is erased!" << endl;
    }
};

Problem D: 给我一台计算机吧!

技术图片

main函数:

int main()
{
    int c, m;
    string n;
    cin>>c>>m>>n;
    CPU cpu(c);
    Memory mem(m);
    Computer com1(cpu, mem, n);
    cin>>c>>m>>n;
    Computer com2(c, m, n);
    com1.show();
    com2.show();
    return 0;
}

考点:类的组合

AC代码:

#include <bits/stdc++.h>
using namespace std;
class CPU
{
    friend class Computer;
    int hz;
public:
    CPU(int _hz):hz(_hz){}
    CPU(const CPU &b):hz(b.hz){}
};
class Memory
{
    friend class Computer;
    int val;
public:
    Memory(int _val):val(_val){}
    Memory(const Memory &b):val(b.val){};
};
class Computer
{
    CPU c;
    Memory m;
    string name;
public:
    Computer(CPU _c, Memory _m,string _name):c(_c),m(_m),name(_name)
    {
    }
    void show()
    {
         cout << "This is " << name << "‘ computer with CPU = " << c.hz << "GHz, memory = " << m.val << "MB." << endl;
    }
};

Problem E: 模板是个好东西

技术图片

main函数:

int main()
{
    string n;
    int x, y, d;
    char c;
    cin>>n;
    cin>>x>>y>>d;
    cin>>c;
    Point p(x, y);
    Data<char> aChar(c);
    Data<int> anInt(d);
    Data<Point> aPoint(p);
    Data<string> aString(n);
    aChar.show();
    anInt.show();
    aString.show();
    aPoint.show();
    return 0;
}

考点:类模板加输出运算符重载

AC代码:

#include <bits/stdc++.h>
using namespace std;
class Point
{
    int x,y;
public:
    Point():x(0),y(0){};
    Point(int _x,int _y):x(_x),y(_y){}
    friend ostream &operator << (ostream &os,Point &b)
    {
        os << b.x <<   << b.y << endl;
        return os;
    }
};
template <class T>
class Data
{
    T a;
public:
    Data(T _a):a(_a){};
    void show()
    {
        cout << a << endl;
    }
};

 

以上是关于HW 8的主要内容,如果未能解决你的问题,请参考以下文章

HW6.22

HW6.20

VSCode自定义代码片段8——声明函数

hw3

HW3书上习题

软测hw3