NFurioso

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

任务一

task1.cpp

#include <iostream>
#include <string>
#include <vector>
#include <array>


template<typename T>
void output1(const T &obj){
    for(auto i: obj)
        std::cout << i << ", ";
    std::cout << "\b\b \n";
}


template<typename T>
void output2(const T &obj){
    for(auto p = obj.begin(); p != obj.end(); ++p)
        std::cout << *p << ", ";
    std::cout << "\b\b \n";
}

void test_array() {
    using namespace std;

    array<int, 5> x1;
    cout << "x1.size() = " << x1.size() << endl;
    x1.fill(42); 
    x1.at(0) = 999; 
    x1[4] = -999;
    cout << "x1: ";
    output1(x1);
    cout << "x1: ";
    output2(x1);

    array<int, 5> x2(x1);
    cout << boolalpha << (x1 == x2) << endl;
    x2.fill(22);
    cout << "x2: ";
    output1(x2);
    swap(x1, x2); 
    cout << "x1: ";
    output1(x1);
    cout << "x2: ";
    output1(x2);
}

void test_vector(){
    using namespace std;

    vector<int> v1;
    cout << v1.size() << endl; 
    cout << v1.max_size() << endl; 
    v1.push_back(55);           
    cout << "v1: ";
    output1(v1);

    vector<int> v2 {1, 0, 5, 2};
    v2.pop_back();                
    v2.erase(v2.begin());        
    v2.insert(v2.begin(), 999);  
    v2.insert(v2.end(), -999);      
    cout << v2.size() << endl;
    cout << "v2: ";
    output2(v2);

    vector<int> v3(5, 42); 
    cout << "v3: ";
    output1(v3);

    vector<int> v4(v3.begin(), v3.end()-2); 
    cout << "v4: ";
    output1(v4);
}

void test_string() {
    using namespace std;

    string s1{"oop"};
    cout << s1.size() << endl;
    for(auto &i: s1)
        i -= 32;
    s1 += "2023";
    s1.append(", hello");
    cout << s1 << endl;
}

int main(){
    using namespace std;

    cout << "===========测试1: array模板类基础用法===========" << endl;
    test_array();

    cout << "\n===========测试2: vector模板类基础用法===========" << endl;
    test_vector();

    cout << "\n===========测试1: string类基础用法===========" << endl;
    test_string();
}
View Code

运行结果

 

任务二

task2.cpp

#include <iostream>
#include <complex>

void test_std_complex() {
    using namespace std;
    complex<double> c1{3, 4}, c2{4.5};
    const complex<double> c3{c2};
    cout << "c1 = " << c1 << endl;
    cout << "c2 = " << c2 << endl;
    cout << "c3 = " << c3 << endl;
    cout << "c3.real = " << c3.real() << ", " << "c3.imag = " << c3.imag()
         << endl;
    cout << "c1 + c2 = " << c1 + c2 << endl;
    cout << "c1 - c2 = " << c1 - c2 << endl;
    cout << "abs(c1) = " << abs(c1) << endl;
    cout << boolalpha;
    cout << "c1 == c2: " << (c1 == c2) << endl;
    cout << "c3 == c2: " << (c3 == c2) << endl;
    complex<double> c4 = 2;
    cout << "c4 = " << c4 << endl;
    c4 += c1;
    cout << "c4 = " << c4 << endl;
}

int main() {
    test_std_complex();
}
View Code

运行结果

 

任务三

task3.cpp

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

class T {
    public:
        T(int x = 0, int y = 0);
        T(const T &t); 
        T(T &&t); 
        ~T();
        void set_m1(int x); 
        int get_m1() const;
        int get_m2() const; 
        void display() const; 
        friend void func();
    private:
        int m1, m2;
    public:
        static void disply_count(); 
    public:
        static const string doc; 
        static const int max_count; 
    private:
        static int count; 
};

const string T::doc{"a simple class"};
const int T::max_count = 99;
int T::count = 0;

T::T(int x, int y): m1{x}, m2{y} {
    ++count;
    cout << "constructor called.\n";
}
T::T(const T &t): m1{t.m1}, m2{t.m2} {
    ++count;
    cout << "copy constructor called.\n";
}
T::T(T &&t): m1{t.m1}, m2{t.m2} {
    ++count;
    cout << "move constructor called.\n";
}
T::~T() {
    --count;
    cout << "destructor called.\n";
}
void T::set_m1(int x) {
    m1 = x;
}
int T::get_m1() const {
    return m1;
}
int T::get_m2() const {
    return m2;
}
void T::display() const {
    cout << m1 << ", " << m2 << endl;
}

void T::disply_count() {
    cout << "T objects: " << count << endl;
}

void func() {
    T t1;
    t1.set_m1(55);
    t1.m2 = 77; 
    t1.display();
}

void test() {
    cout << "T class info: " << T::doc << endl;
    cout << "T objects max_count: " << T::max_count << endl;
    T::disply_count();
    T t1;
    t1.display();
    t1.set_m1(42);
    T t2{t1};
    t2.display();
    T t3{std::move(t1)};
    t3.display();
    t1.display();
    T::disply_count();
}

int main() {
    cout << "============测试类T============" << endl;
    test();
    cout << endl;
    cout << "============测试友元函数func()============" << endl;
    func();
}
View Code

运行结果

 

任务四

task4.cpp

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

class Rect {
    private:
        static int size;
    public:
        static const string doc;
        static int size_info() {
            return size;
        }
        friend void test();
    private:
        double length, width;
    public:
        Rect(double l = 2.0, double w = 1.0) : length{l}, width{w} {
            size++;
        }
        Rect(const Rect &obj) : length{obj.length}, width{obj.width} {
            size++;
        }
        ~Rect() {
            size--;
        }
        double len() const {
            return length;
        }
        double wide() const {
            return width;
        }
        double area() const {
            return length * width;
        }
        double circumference() const {
            return 2 * (length + width);
        }
        void resize(double times) {
            length *= times;
            width *= times;
        }
        void resize(double l_times, double w_times) {
            length *= l_times;
            width *= w_times;
        }
};
int Rect::size = 0;
const string Rect::doc{"a simple Rect class"};

void output(const Rect &r) {
    cout << "矩形信息: " << endl;
    cout << fixed << setprecision(2);
    cout << "长: \t" << r.len() << endl;
    cout << "宽: \t" << r.wide() << endl;
    cout << "面积: \t" << r.area() << endl;
    cout << "周长: \t" << r.circumference() << endl;
}

void test() {
    cout << "矩形类信息: " << Rect::doc << endl;
    cout << "当前矩形对象数目: " << Rect::size_info() << endl;
    Rect r1;
    output(r1);
    Rect r2(4, 3);
    output(r2);
    Rect r3(r2);
    r3.resize(2);
    output(r3);
    r3.resize(5, 2);
    output(r3);
    cout << "当前矩形对象数目: " << Rect::size_info() << endl;
}

int main() {
    test();
    cout << "当前矩形对象数目: " << Rect::size_info() << endl;
}
View Code

运行结果

 

任务五

task5.cpp

#include <iostream>
#include <cmath>

class Complex {
    private:
        double real, imag;
    public:
        Complex(double r = 0, double i = 0) : real{r}, imag{i} {};
        Complex(const Complex &c) :real{c.real},imag{c.imag} {};
        double get_real() const {
            return real;
        }
        double get_imag() const {
            return imag;
        }
        void add(const Complex &c) {
            real += c.get_real();
            imag += c.get_imag();
        }
        void show() {
            std::cout << real;
            if (imag>0) std::cout << " + " << abs(imag) << 'i';
            if (imag<0) std::cout << " - " << fabs(imag) << 'i';
        }
        void show() const {
            std::cout << real;
            if (imag>0) std::cout << " + " << abs(imag) << 'i';
            if (imag<0) std::cout << " - " << fabs(imag) << 'i';
        }
    public:
        friend Complex add(const Complex&, const Complex&);
        friend bool is_equal(const Complex&, const Complex&);
        friend double abs(const Complex&);
};
Complex add(const Complex &c1, const Complex &c2) {
    double r, i;
    r = c1.get_real() + c2.get_real();
    i = c1.get_imag() + c2.get_imag();
    Complex c(r, i);
    return c;
}
bool is_equal(const Complex &c1, const Complex &c2) {
    bool r, i;
    r = c1.get_real() == c2.get_real();
    i = c1.get_imag() == c2.get_imag();
    return r && i;
}
double abs(const Complex &c) {
    return sqrt(pow(c.get_real(), 2) + pow(c.get_imag(), 2));
}

void test() {
    using namespace std;
    Complex c1(3, -4);
    const Complex c2(4.5);
    Complex c3(c1);
    cout << "c1 = ";
    c1.show();
    cout << endl;
    cout << "c2 = ";
    c2.show();
    cout << endl;
    cout << "c2.imag = " << c2.get_imag() << endl;
    cout << "c3 = ";
    c3.show();
    cout << endl;
    cout << "abs(c1) = ";
    cout << abs(c1) << endl;
    cout << boolalpha;
    cout << "c1 == c3 : " << is_equal(c1, c3) << endl;
    cout << "c1 == c2 : " << is_equal(c1, c2) << endl;
    Complex c4;
    c4 = add(c1, c2);
    cout << "c4 = c1 + c2 = ";
    c4.show();
    cout << endl;
    c1.add(c2);
    cout << "c1 += c2, " << "c1 = ";
    c1.show();
    cout << endl;
}

int main() {
    test();
}
View Code

运行结果

 

posted on 2023-11-05 20:40  NFurioso  阅读(3)  评论(0编辑  收藏  举报