实验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(); }