实验二

实验一

#ifndef T_H 
#define T_H 
#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; 
};
void func(); 
#endif
t.h
#include "t.h"  
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(); 
}
t.cpp
#include "t.h" 
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(); 
}
main.cpp

 

实验二

#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 << std::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;
}

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";
}
employee.hpp
#include "Employee.hpp"
#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(2019, 6, 30);
employee1.update_salary(35000);
employee1.display_info();
cout << endl << endl;
Employee employee2{"Tony", 20000, 2023, 3, 16};
employee2.raise_salary(15);
employee2.display_info();
cout << endl << endl;
Employee::display_count();
}
int main() {
test();
}
main.cpp

 

实验三

 1 #include <iostream>
 2 #include<cmath>
 3 
 4 class Complex {
 5     private:
 6         double real, imag;
 7     public:
 8         Complex(double r = 0, double i = 0) : real{r}, imag{i} {};
 9         Complex(const Complex &c) : real{c.real}, imag{c.imag} {};
10         double get_real() const {return real;}
11         double get_imag() const {return imag;}
12         void add(const Complex &c) {
13             real += c.get_real();
14             imag += c.get_imag();
15         }
16         void show() {
17             std::cout << real;
18             if (imag > 0) std::cout << " + " << abs(imag) << 'i';
19             if (imag < 0) std::cout << " - " << fabs(imag) << 'i';
20         }
21         void show() const {
22             std::cout << real;
23             if (imag > 0) std::cout << " + " << abs(imag) << 'i';
24             if (imag < 0) std::cout << " - " << fabs(imag) << 'i';
25         }
26     public:
27         friend Complex add(const Complex&, const Complex&);
28         friend bool is_equal(const Complex&, const Complex&);
29         friend double abs(const Complex&);
30 };
31 Complex add(const Complex &c1, const Complex &c2) {
32     double r, i;
33     r = c1.get_real() + c2.get_real();
34     i = c1.get_imag() + c2.get_imag();
35     Complex c(r, i);
36     return c;
37 }
38 bool is_equal(const Complex &c1, const Complex &c2) {
39     bool r, i;
40     r = c1.get_real() == c2.get_real();
41     i = c1.get_imag() == c2.get_imag();
42     return r && i;
43 }
44 double abs(const Complex &c) {
45     return sqrt(pow(c.get_real(), 2) + pow(c.get_imag(), 2));
46 }
complex.cpp
 1 #include <iostream>
 2 #include <cmath>
 3 #include "Complex.hpp"
 4 
 5 // 复数类Complex: 测试
 6 void test() {
 7     using namespace std;
 8     Complex c1(3, -4);
 9     const Complex c2(4.5);
10     Complex c3(c1);
11     cout << "c1 = ";
12     c1.show();
13     cout << endl;
14     cout << "c2 = ";
15     c2.show();
16     cout << endl;
17     cout << "c2.imag = " << c2.get_imag() << endl;
18     cout << "c3 = ";
19     c3.show();
20     cout << endl;
21     cout << "abs(c1) = ";
22     cout << abs(c1) << endl;
23     cout << boolalpha;
24     cout << "c1 == c3 : " << is_equal(c1, c3) << endl;
25     cout << "c1 == c2 : " << is_equal(c1, c2) << endl;
26     Complex c4;
27     c4 = add(c1, c2);
28     cout << "c4 = c1 + c2 = ";
29     c4.show();
30     cout << endl;
31     c1.add(c2);
32     cout << "c1 += c2, " << "c1 = ";
33     c1.show();
34     cout << endl;
35 }
36 
37 int main() {
38     test();
39 }
main.cpp

 

实验四

#pragma once

#include<iostream>
#include<string>

using namespace std;


class User {
public:
    User(string name,string passwd = "111111",string email = " "): N{name}, P{passwd}, E{email} {n++;}
    ~User() = default;    
 
    void print_info();
    static void print_n();
    void set_email();
    void change_passwd();
 
private:
    static int n;
    string N,P,E;
};
 
int User::n = 0;

void User::set_email()
{
    cout << "Enter email address: " ;
    cin >> E ;
    cout << "email is set successfully..." << endl;
}
 
void User::change_passwd()
{
    cout << "Enter old password: ";
    string temp;
    int i = 3;
    while(i)
    {
        cin >> temp;
        if(temp == P)
        {   
            cout << "Enter new passwd: ";
            cin >> P;  
            cout << "new passwd is set successfully..." << endl;
            break;
        }
        else 
        {
            i--;
            if(i != 0)
                cout << "password input error. Please re-enter again: " ;
        }
        if(i == 0)
        {
            cout << "password input error. Please try after a while." << endl;
        }
    }
 
}

void User::print_info()
{   
    string pp(P.size(), '*');
    cout << "name:   " << N << endl;
    cout << "passwd: " << pp << endl;
    cout << "email:  " << E << endl;
}
 
void User::print_n()
{
    cout << "there are " << n << " users." << endl;
}
user.hpp
#include "User.hpp"
#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\n";
User user2("Leonard");
user2.change_passwd();
user2.set_email();
user2.print_info();
cout << endl;
User::print_n();
}
int main() {
test();
}
task4.cpp

 

实验五

class SavingsAccount {
private:
    int id;
    double balance;
    double rate;
    int lastDate;
    double accumulation;
    static double total;
    
    void record(int date, double amount);
    double accumulate(int date) const {
        return accumulation+balance*(date-lastDate);
    }
public:
    SavingsAccount(int date, int id, double rate);
    int getId() const {return id;}
    double getBalance() const {return balance;}
    double getRate() const {return rate;}
    static double getTotal() {return total;}
    void deposit(int data, double amount);
    void withdraw(int data, double amount);
    void settle(int data);
    void show() const; 
};
account.h
#include "account.h"
#include <cmath>
#include <iostream>
using namespace std;

double SavingsAccount::total=0;
SavingsAccount::SavingsAccount(int date, int id, double rate): id(id), balance(0), rate(rate), lastDate(date), accumulation(0) {
    cout << date << "\t#" << id << "is created" << endl;
}
void SavingsAccount::record(int date, double amount) {
    accumulation = accumulate(date);
    lastDate = date;
    amount = floor(amount*100+0.5)/100;
    balance += amount;
    total += amount;
    cout << date << "\t#" << id << "\t" << amount << "\t" << balance << endl; 
}
void SavingsAccount::deposit(int date, double amount) {
    record(date, amount);
}
void SavingsAccount::withdraw(int date, double amount) {
    if(amount>getBalance())
      cout << "Error: not enough money" << endl;
    else
      record(date, -amount);
}
void SavingsAccount::settle(int date) {
    double interest = accumulate(date) * rate/365;
    if(interest != 0)
      record(date, interest);
    accumulation = 0;
}
void SavingsAccount::show() const {
    cout << "#" << id << "\tBalance: " << balance;
}
account.cpp
#include "account.h"
#include <iostream>
using namespace std;

int main() {
    SavingsAccount sa0(1, 21325302, 0.015);
    SavingsAccount sa1(1, 58320212, 0.015);
    
    sa0.deposit(5,5000);
    sa1.deposit(25,10000);
    sa0.deposit(45,5500);
    sa1.withdraw(60,4000);
    
    sa0.settle(90);
    sa1.settle(90);
    
    sa0.show(); cout << endl;
    sa1.show(); cout << endl;
    cout << "Total: " << SavingsAccount::getTotal() << endl;
    return 0;
}
5_11.cpp

 

posted @ 2023-10-22 22:19  不卷的花卷  阅读(17)  评论(0)    收藏  举报