实验二 类与对象
Task 3:
Complex.cpp:
#include <iostream> #include <cmath> class Complex{ public: Complex (double r=0,double i=0){ real = r; imag = i; } Complex (const Complex &c){ real = c.real; imag = c.imag; } private: double real; double imag; public: double get_real() const {return real;} double get_imag() const {return imag;} void show() const { std::cout << real; if(imag > 0) std::cout << "+" << imag << "i"; if(imag < 0) std::cout << "-" << imag << "i"; } void add(const Complex &c1){ real += c1.get_real(); imag += c1.get_imag(); } public: friend Complex add(const Complex &c1,const Complex &c2){ return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag()); }; friend bool is_equal(const Complex &c1,const Complex &c2){ return (c1.real == c2.real) && (c1.imag == c2.imag); } friend double abs(const Complex &c1){ return sqrt(c1.real*c1.real + c1.imag*c1.imag); } };
main.cpp:
#include <iostream> #include <cmath> #include "Complex.cpp" 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(); }

Task 4:
User.hpp:
#pragma once #include <iostream> #include <string> using std::string; using std::cout; using std::cin; class User{ public: User(); User(string name,string passwd="111111",string email=""):name{name},passwd{passwd},email{email} {n++;}; void print_info(); void set_email(); void change_passwd(); static void print_n(); private: string name; string passwd; string email; static int n; }; int User::n=0; void User::set_email(){ using namespace std; cout << "Enter email address: "; cin>>email; cout << "email is set successfully...\n" << endl; } void User::change_passwd(){ using namespace std; string pwd,newwd; for(int i=0;i<=3;i++) { if(i==0){ cout<<"Enter old password:"; } else if(i==3){ cout << "Please try after a while. \n"; break; } else { cout<<"Please re-enter again:"; cin>>pwd; if (pwd!=passwd){ cout<<"password input error.\n"; continue; } else{ cout<<"Enter newpassword:"; cin>>newwd; passwd=newwd; cout << "new passwd is set successfully...\n"; break; } } } } void User::print_info(){ using namespace std;
string s(passwd.size(), '*');
cout << "passwd: " << passwd << endl; cout << "name: " << name << endl; cout << "email: " << email << endl; }
void User::print_n(){
cout << "there are " << n << " users\n";
}
main.cpp:
#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(); }


Task 5:
account.hpp:
#ifndef__ACCOUNT_H__ #define__ACCOUNT_H__ class SavingsAccount { private: int id; double balance; double rate; int lastDate; double accumulation; static double total; void record(int data,double amount); double accumulate(int date)const { return accumulation+balance*(date-lastDate); } public: SavingsAccount(int data,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 date,double amount); void withdraw(int data,double amount); void settle(int date); void show() const; };
account.cpp:
#include"accout.hpp" #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 data) { double interest=accumulate(data)*rate/365; if(interest!=0) record(data,interest); accumulation=0; } void SavingsAccount::show() const { cout<<"#"<<id<<"\tBalance:"<<balance; }
5_11.cpp:
#include "accout.hpp" #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; }


浙公网安备 33010602011771号