实验2.1

#include <iostream>
#include <complex>

int main() {
    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() << endl;
    cout << "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;

}

实验2.2

#include <iostream>
#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.cbegin(); p != obj.cend(); ++p)
         std::cout << *p << ", ";
      std::cout << "\b\b \n";
}
int main() {
    using namespace std;
    array<int, 5> x1; 
    cout << "x1.size() = " << x1.size() << endl;
    x1.fill(42); 
    x1.at(0) = 999;
    x1.at(4) = -999; 
    x1[1] = 777;
    cout << "x1: ";
    output1(x1);
    cout << "x1: ";
    output2(x1);
    array<double, 10> x2{ 1.5, 2.2 }; 
    cout << "x2.size() = " << x2.size() << endl;
    cout << "x2: ";
    output1(x2);
    array<int, 5> x3{ x1 };  
    cout << boolalpha << (x1 == x3) << endl;
    x3.fill(22);
    cout << "x3: ";
    output1(x3);
    swap(x1, x3); 
    cout << "x1: ";
    output1(x1);
    cout << "x3: ";
    output1(x3);
}

实验2.3

#pragma once
#include <iostream>
#include <string>
#include <iomanip>
using std::string;
using std::cout;
using std::endl;
using std::setfill;
using std::setw;
using std::left;
using std::right;
using std::to_string;
struct Date {
    int year;
    int month;
    int day;
};
class Employee
{
public:
    Employee();
    Employee(string name0, double salary0, int y, int m, int d = 1);
    void set_info(string name0, double salary0, int y, int m, int d = 1);
    
    string get_name() const;   
    double get_salary() const;  
    void display_info() const;   
    void update_salary(double s);   
    void update_hire_date(int y, int m, int d); 
    void raise_salary(double by_percent); 
public:
    static void display_count(); 
private:
    string id; 
    string name; 
    double salary; 
    Date hire_date; 
public:
    static const string doc; 
private:
    static int count;
};
const string Employee::doc{ "a simple Employee class" };
int Employee::count = 0;
// 默认构造函数
Employee::Employee() : id{ to_string(count + 1) } {
    ++count;
}
// 带参数的构造函数
Employee::Employee(string name0, double salary0, int y, int m, int d) :
    id{ to_string(count + 1) }, name{ name0 }, salary{ salary0 },
    hire_date{ y, m, d } {
    ++count;
}
// 设置员工信息
void Employee::set_info(string name0, double salary0, int y, int m, int d)
{
    name = name0;
    salary = salary0;
    hire_date.year = y;
    hire_date.month = m;
    hire_date.day = d;
}
// 获取员工姓名
string Employee::get_name() const {
    return name;
}
// 获取员工薪水
double Employee::get_salary() const {
    return salary;
}
// 显示雇员信息
void Employee::display_info() const {
    cout << left << setw(15) << "id: " << id << endl;
    cout << setw(15) << "name: " << name << endl;
    cout << setw(15) << "salary: " << salary << endl;
    cout << setw(15) << "hire_date: " << hire_date.year << "-";
    cout << right << setfill('0') << setw(2) << hire_date.month << "-" <<
        setw(2) << hire_date.day;
    cout << setfill(' '); // 恢复到默认空格填充
}
// 更新薪水
void Employee::update_salary(double s) {
    salary = s;
}
// 更新雇佣日期
void Employee::update_hire_date(int y, int m, int d) {
    hire_date.year = y;
    hire_date.month = m;
    hire_date.day = d;
}
// 雇员提薪加成
// by_percent是提升比例
void Employee::raise_salary(double by_percent) {
    double raise = salary * by_percent / 100;
    salary += raise;
}

void Employee::display_count() {
    cout << "there are " << count << " employees\n";
}
#include "Employee.h"
#include <iostream>
void test() {
    using std::cout;
    using std::endl;
    cout << Employee::doc << endl << endl;
    Employee employee1;
    employee1.set_info("Sam", 30000, 2015, 1, 6);
    employee1.update_hire_date(2017, 6, 30);
    employee1.update_salary(35000);
    employee1.display_info();
    cout << endl << endl;
    Employee employee2{ "Tony", 20000, 2020, 3, 16 };
    employee2.raise_salary(15); // 提成15%
    employee2.display_info();
    cout << endl << endl;
    Employee::display_count();
}
int main() {
    test();
}

实验2.4

#pragma once
#include<iostream>
#include<cmath>
using namespace std;
class Complex {
    friend Complex add(const Complex& a,const Complex& b);
    friend bool is_equal(const Complex& a,const Complex& b) ;
    friend float abs(Complex& C);
public:
    Complex(float re=0, float im=0) :real(re), imag(im) {};
    Complex(const Complex& C);

    float get_real() const{
        return real;
    };
    float get_imag() const{
        return imag;
    };
    void show() const;
    Complex add(const Complex& C);

private:
    float real, imag;
};

//复制构造函数接口
Complex::Complex(const Complex &C) {
    real = C.real;
    imag = C.imag;
};

//成员函数show()接口
void Complex::show()const{
    if(imag>0)
    cout << real << '+' << imag << 'i';
    else if(imag<0)
    cout << real  << imag << 'i';
    else
    cout << real;
};

//成员函数add()接口
Complex Complex::add(const Complex &C){
real += C.real, imag += C.imag;
return Complex(real + C.real, imag + C.imag); }; //友元函数add()接口 Complex add(const Complex& a, const Complex& b){ return Complex(a.real + b.real, a.imag + b.imag); }; //友元函数is_equal()接口 bool is_equal( const Complex& a, const Complex& b){ if (a.real == b.real && a.imag == b.imag) return true; else return false; } //友元函数abs()接口 float abs(Complex& C) { return sqrt(C.real * C.real+C.imag*C.imag); } #include "Complex.h" #include <iostream> // 类测试 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(); }

 

实验2.5

#pragma once
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
class User {
public:
    User(string name0, string passwd0="111111", string email0="") :name(name0), passwd(passwd0), email(email0) {++n;};
    void set_email();
    void change_passwd();
    void print_info() const;
    static void print_n();
private:
    string name;
    string passwd;
    string email;
    static int n;
};
int User::n = 0;
//print_n()接口
 void User::print_n(){
    cout << "There are " << n << " users.";
}
//print_info()函数接口
void User::print_info() const{
    cout << left<<setw(8)<<"name:" << name << endl;
    cout <<setw(8)<< "passwd:";
    for (int i = 1; i <= passwd.length(); i++)
        cout << "*";
    cout << endl;
    cout <<setw(8)<< "email:" << email << endl;
}
//set_email()函数接口
void User::set_email() {
    string a;
    cout << "Enter email address:";
    cin >> a;
    email = a;
    cout << "email is set successfully..." << endl;
}
//change_passwd()函数接口
void User::change_passwd() {
    string a;
    for (int i = 1; i <= 3; i++) {
        if (i == 1)
            cout << "Enter old password:";
        cin >> a;
        if (passwd == a) {
            cout << "Enter new passwd:";
            cin >> a, passwd = a;
            cout << "new passwd is set sucessfully..."<<endl;
            break;
        }
        else{
            if(i<3)
            cout << "password input error.Please re-enter again:";
        }
        if (i == 3) {
            cout << "password input error.Please try after a while" << endl; break;
        }
    }
}
#include "User.h"
#include <iostream>

void test() {
    using std::cout;
    using std::endl;
    cout << "testing 1......\n";
    User user1("Jonny", "92197", "xyz@hotmail.com");
    user1.print_info();

    cout << endl<< "testing 2......\n";
    User user2("Leonard");
    user2.change_passwd();
    user2.set_email();
    user2.print_info();

    cout << endl;
    User::print_n();

}
int main() {
    test();
}

 

 posted on 2022-10-15 20:01  都说了没有名字  阅读(21)  评论(0编辑  收藏  举报