实验二 类和对象(2)

4. 实验任务4
不使用C++标准库,自行设计并实现一个简化版复数类Complex。
Complex.hpp:
 
#pragma once

#include<iostream>
#include<string>
#include<iomanip>
#include<cmath>
using namespace std;
class Complex{
    public:
    Complex(double r=0,double i=0);
    Complex(const Complex&c);
    double get_real()const;
    double get_imag()const;
    void show()const;
    void add(const Complex& c); 
    friend Complex add(Complex &c1,const Complex &c2);//加const根据task4中第9和33行 
    friend bool is_equal(Complex &c1,const Complex &c2);//加const根据task4中第9和30行 
    friend double abs(Complex&c);
    
    private:
        double real,imag;
};
Complex::Complex(double r,double i):real{r},imag{i}{}

Complex::Complex(const Complex&c):real{c.real},imag{c.imag}{}

double Complex::get_real()const{
    return real;
}

double Complex::get_imag()const{
    return imag;
}

void Complex::show()const{
    if(imag>0)
        cout<<real<<" + "<<imag<<"i";
    else if(imag==0)
            cout<<real;
         else
             cout<<real<<" - "<<-imag<<"i";
}

void Complex::add(const Complex& c){
    real+=c.real;
    imag+=c.imag;
}

Complex add(Complex &c1,const Complex &c2){
    return Complex(c1.real+c2.real,c1.imag+c2.imag);
}

bool is_equal(Complex &c1,const Complex &c2){
    return(c1.real==c2.real&&c1.imag==c2.imag);
}

double abs(Complex&c){
    return sqrt(c.real*c.real+c.imag*c.imag);
}

task 4.cpp:

 

#include "Complex.hpp"
#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();
}

运行结果:

 

 
5. 实验任务5
设计并实现一个用户类User,并在主函数中使用和测试这个类。
User.hpp:
 
#include<iostream>
#include<string>
using namespace std;
class User{
public:
    User(string na,string pa="111111",string em="");
    void set_email();
    void change_passwd();
    void print_info();
    static void print_n(); 
    
private:
    string name,passwd,email;
    static int n;
};
    int User::n=0;

User::User(string na,string pa,string em):name{na},passwd{pa},email{em}{
    n++;
}

void User::set_email(){
    string email1;
    cout<<"Enter email address: ";
    cin>>email1;
    email=email1;
    cout<<"email is set successfully…"<<endl; 
}

void User::change_passwd(){
    string old_passwd,new_passwd;
    int count=1;
    cout<<"Enter old password: ";
    cin>>old_passwd; 
    while(count<=3){    
        if(old_passwd!=passwd){
                cout<<"passwd input error.Please re-enter again:";
                cin>>old_passwd;
                count++;
                if(count==3){
                    cout<<"passwd input error.Please try after a while."<<endl;
                    break;
                }
        }
        else{
                cout<<"Enter new password: ";
                cin>>new_passwd;
                passwd=new_passwd;
                cout<<"new passwd is set successfully…"<<endl;
                break;
            }            
    }
}

void User::print_info(){
    string passwd0(passwd.length(),'*');
    cout<<"name:\t"<<name<<endl;
    cout<<"passwd:\t"<<passwd0<<endl;
    cout<<"email:\t"<<email<<endl;
}

void User::print_n(){
    cout<<"there are "<<n<<" users.";
}

task 5.cpp:

 

#include "User.hpp"
#include <iostream>

// 娴嬭瘯User绫?
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();
}

 

运行结果:

测试一:

测试二:

 

 
posted @ 2022-10-16 18:22  laver——枫  阅读(14)  评论(0)    收藏  举报