实验一 类和对象

1.实验任务1

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main() 
{

    string s1;
    string s2{ "c plus plus" };
    string s3{ s2 };
    string s4 = s2;

    s1 = "opp";

    vector<string> v1;
    v1.push_back(s1);
    v1.push_back(s2 + "1");
    v1.push_back(s3 + "2");
    v1.push_back(s4 + "3");

    cout << "output1: " << endl;
    for (auto item : v1)
        cout << item << endl;


    cout << "output2: ";
    for (auto p = v1.begin(); p != v1.end(); p++)
        cout << *p << endl;

    cout << "output3: " << endl;
    for (auto i = 0; i < v1.size(); i++)
        cout << v1[i] << endl;

    vector <string> v2(v1.rbegin(), v1.rend());

    cout << "v2: " << endl;
    for (auto item : v2)
        cout << item << endl;

}

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
#include <cstdlib>
#include <time.h>

using namespace std;

template <typename T>
void output(const T &obj)
{
    for (auto item : obj)
    {
        cout << item << " ";
    }
    cout << endl;
}

int main()
{
    vector<int> v1{1, 9, 8, 4};
    v1.insert(v1.begin(), 2022);
    v1.insert(v1.end(), 2023);
    cout << "v1: ";
    output(v1);
    v1.pop_back();
    v1.erase(v1.begin());
    cout << "v1: ";
    output(v1);
    vector<string> v2{"《1984》", "《动物农场》", "《美丽新世界》"};
    cout << "v2: ";
    output(v2);
    return 0;
}

2.实验任务2

#include<iostream>
#include<iomanip>
using namespace std;

class Point 
{
public:
    Point(int x0 = 0, int y0 = 0);
    Point(const Point& p);
    ~Point() = default;

    int get_x() const { return x; }
    int get_y() const { return y; }
    void show()const;

private:
    int x, y;
};

Point::Point(int x0, int y0) :x{ x0 }, y{ y0 }{
    cout << "constructor called." << endl;
}

Point::Point(const Point& p) : x{ p.x }, y{ p.y }{
    cout << "copy constructor called." << endl;
}

void Point::show()const {
    cout << "(" << x << "," << y << ")" << endl;
}

int main() {
    Point p1(4, 5);
   

 



    Point p2 = p1;
    p2.show();

    Point p3{ p2 };
    p3.show();
    cout << p3.get_x() << endl;
    return 0;
}

 

3.实验任务3

#include <iostream>
#include <iomanip>

using namespace std;

class Clock
{
public:
    Clock(int h = 0, int m = 0, int s = 0);
    Clock(const Clock& t);
    ~Clock() = default;
    void set_time(int h, int m = 0, int s = 0);

    void show_time() const;
private:
    int hour, minute, second;
};

Clock::Clock(int h, int m, int s) : hour{ h }, minute{ m }, second{ s }

{
    cout << "constructor called" << endl;
}
Clock::Clock(const Clock& t) : hour{ t.hour }, minute{ t.minute },
second{ t.second }

{
    cout << "copy constructor called" << endl;
}
void Clock::set_time(int h, int m, int s)

{
    hour = h;
    minute = m;
    second = s;
}
void Clock::show_time() const

{
    using std::setw;
    using std::setfill;
    cout << setfill('0') << setw(2) << hour << ":"
        << setw(2) << minute << ":"
        << setw(2) << second << endl;
}

Clock reset()

{
    return Clock(0, 0, 0);
}
int main()
{
    Clock c1(12, 0, 5);
    c1.show_time();
    c1 = reset();
    c1.show_time();
    Clock c2(c1);
    c2.set_time(6);
    c2.show_time();
}

4.实验任务4

#include<iostream>
using namespace std;


class X {
public:
    X();
    ~X();
    X(int m);
    X(const X& obj);
    X(X&& obj) noexcept;
    void show() const;
private:
    int data;
};
X::X() : data{ 42 } {
    cout << "default constructor called.\n";
}
X::~X() {
    cout << "destructor called.\n";
}
X::X(int m) : data{ m } {
    cout << "constructor called.\n";
}
X::X(const X& obj) : data{ obj.data } {
    cout << "copy constructor called.\n";
}
X::X(X&& obj) noexcept : data{ obj.data } {
    cout << "move constructor called.\n";
}
void X::show() const {
    cout << data << endl;
}

int main() {
    X x1;    //调用默认构造函数
    x1.show();
    X x2{ 2049 }; //调用拷贝构造函数
    x2.show();
    X x3{ x1 };   //调用拷贝构造函数
    x3.show();    
    X x4{ std::move(x2) };  //调用拷贝构造函数
    x4.show();
    return 0;
//析构时顺序为x4 x3 x2 x1 }

5.实验任务5

#include<iostream>
#include<iomanip>
using namespace std;
class Rectangle
{
public:
    Rectangle(double length = 2.0, double width = 1.0);
    Rectangle(const Rectangle& obj);
    double len()const;
    double wide()const;
    double area()const;
    double circumference()const;
    void resize(double times);
    void resize(double times, double w_times);
private:
    double _length;
    double _width;
};

Rectangle::Rectangle(double length, double width)
{
    _length = length;
    _width = width;
}

Rectangle::Rectangle(const Rectangle& obj)
{
    _length = obj._length;
    _width = obj._width;
}

double Rectangle::len()const
{
    return _length;
}

double Rectangle::wide()const
{
    return _width;
}

double Rectangle::area()const
{
    return _length * _width;
}

double Rectangle::circumference()const
{
    return _length * 2 + _width * 2;
}
void Rectangle::resize(double times)
{
    _length *= times;
    _width *= times;
}

void Rectangle::resize(double times, double w_times)
{
    _length *= times;
    _width *= w_times;
}

void output(const Rectangle& rect)
{
    cout << "矩形信息:\n";
    cout << fixed << setprecision(2);
    cout << "长:    " << rect.len() << endl;
    cout << "宽:    " << rect.wide() << endl;
    cout << "面积:  " << rect.area() << endl;
    cout << "周长:  " << rect.circumference() << endl;
}
int main()
{
    Rectangle rect1;
    output(rect1);

    Rectangle rect2(10, 5);
    output(rect2);

    Rectangle rect3(rect1);
    rect3.resize(2);
    output(rect3);

    rect3.resize(5, 2);
    output(rect3);
    system("pause");
    return 0;
}

 

posted on 2022-09-29 09:57  Xelfin  阅读(7)  评论(0编辑  收藏  举报

导航