<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      任務一:

      button.hpp:

      #pragma once
      
      #include <iostream>
      #include <string>
      
      using std::string;
      using std::cout;
      
      // 按鈕類
      class Button {
      public:
          Button(const string &text);
          string get_label() const;
          void click();
      
      private:
          string label;
      };
      
      Button::Button(const string &text): label{text} {
      }
      
      inline string Button::get_label() const {
          return label;
      }
      
      void Button::click() {
          cout << "Button '" << label << "' clicked\n";
      }

      window.hpp:

      #pragma once
      #include "button.hpp"
      #include <vector>
      #include <iostream>
      
      using std::vector;
      using std::cout;
      using std::endl;
      
      // 窗口類
      class Window{
      public:
          Window(const string &win_title);
          void display() const;
          void close();
          void add_button(const string &label);
      
      private:
          string title;
          vector<Button> buttons;
      };
      
      Window::Window(const string &win_title): title{win_title} {
          buttons.push_back(Button("close"));
      }
      
      inline void Window::display() const {
          string s(40, '*');
      
          cout << s << endl;
          cout << "window title: " << title << endl;
          cout << "It has " << buttons.size() << " buttons: " << endl;
          for(const auto &i: buttons)
              cout << i.get_label() << " button" << endl;
          cout << s << endl;
      }
      
      void Window::close() {
          cout << "close window '" << title << "'" << endl;
          buttons.at(0).click();
      }
      
      void Window::add_button(const string &label) {
          buttons.push_back(Button(label));
      }

      task1.cpp:

      #include "window.hpp"
      #include <iostream>
      
      using std::cout;
      using std::cin;
      
      void test() {
          Window w1("new window");
          w1.add_button("maximize");
          w1.display();
          w1.close();
      }
      
      int main() {
          cout << "用組合類模擬簡單GUI:\n";
          test();
      }

      問題1:自定義了兩個類,Window和Button。使用了標準庫的兩個類vector和string。Button中使用string,Window中使用string,vector和Button。

      問題2:不適合。const是表示數據不可更改,隨意添加可能會報錯。inline是修飾內聯,小且多次調用的函數加上inline可以提高效率,否則無法提高效率還會增加開銷。

      問題3:輸出40個*號,讓輸出結果更清晰。

      任務二:

      #include <iostream>
      #include <vector>
      
      using namespace std;
      
      void output1(const vector<int> &v) {
          for(auto &i: v)
              cout << i << ", ";
          cout << "\b\b \n";
      }
      
      void output2(const vector<vector<int>> v) {
          for(auto &i: v) {
              for(auto &j: i)
                  cout << j << ", ";
              cout << "\b\b \n";
          }
      }
      
      void test1() {
          vector<int> v1(5, 42);
          const vector<int> v2(v1);
      
          v1.at(0) = -999;
          cout << "v1: ";  output1(v1);
          cout << "v2: ";  output1(v2);
          cout << "v1.at(0) = " << v1.at(0) << endl;
          cout << "v2.at(0) = " << v2.at(0) << endl;
      }
      
      void test2() {
          vector<vector<int>> v1{{1, 2, 3}, {4, 5, 6, 7}};
          const vector<vector<int>> v2(v1);
      
          v1.at(0).push_back(-999);
          cout << "v1: \n";  output2(v1);
          cout << "v2: \n";  output2(v2);
      
          vector<int> t1 = v1.at(0);
          cout << t1.at(t1.size()-1) << endl;
          
          const vector<int> t2 = v2.at(0);
          cout << t2.at(t2.size()-1) << endl;
      }
      
      int main() {
          cout << "測試1:\n";
          test1();
      
          cout << "\n測試2:\n";
          test2();
      }

      問題1:21行:創建一個包含5個元素的int型數組v1,且每個元素初始值為42.

      22行:將v1的數組復制到v2的數組中。

      23行:將v1的第一個元素賦值為-999。

      問題2:32行:創建了一個二維int型數組v1,包含兩個一維數組,分別為{1,2,3}和{4,5,6,7}。

      33行:將v1的數組復制到v2中,且v2的值不可改變。

      34行:在v1的第一行的最后插入-999。

      問題3:39行:將v1中地址為0的數組賦值t1。

      40行:輸出t1中的最后一個元素。

      42行:將v2中地址為0的數組賦值給t2。

      43行:輸出t2中的最后一個元素。

      問題4:深復制。需要。

      任務三:

      vectorInt.hpp:

      #pragma once
      
      #include <iostream>
      #include <cassert>
      
      using std::cout;
      using std::endl;
      
      // 動態int數組對象類
      class vectorInt{
      public:
          vectorInt(int n);
          vectorInt(int n, int value);
          vectorInt(const vectorInt &vi);
          ~vectorInt();
      
          int& at(int index);
          const int& at(int index) const;
      
          vectorInt& assign(const vectorInt &v);
          int get_size() const;
      
      private:
          int size;
          int *ptr;       // ptr指向包含size個int的數組
      };
      
      vectorInt::vectorInt(int n): size{n}, ptr{new int[size]} {
      }
      
      vectorInt::vectorInt(int n, int value): size{n}, ptr{new int[size]} {
          for(auto i = 0; i < size; ++i)
              ptr[i] = value;
      }
      
      vectorInt::vectorInt(const vectorInt &vi): size{vi.size}, ptr{new int[size]} {
          for(auto i = 0; i < size; ++i)
              ptr[i] = vi.ptr[i];
      }
      
      vectorInt::~vectorInt() {
          delete [] ptr;
      }
      
      const int& vectorInt::at(int index) const {
          assert(index >= 0 && index < size);
      
          return ptr[index];
      }
      
      int& vectorInt::at(int index) {
          assert(index >= 0 && index < size);
      
          return ptr[index];
      }
      
      vectorInt& vectorInt::assign(const vectorInt &v) {  
          delete[] ptr;       // 釋放對象中ptr原來指向的資源
      
          size = v.size;
          ptr = new int[size];
      
          for(int i = 0; i < size; ++i)
              ptr[i] = v.ptr[i];
      
          return *this;
      }
      
      int vectorInt::get_size() const {
          return size;
      }

      task3.cpp:

      #include "vectorInt.hpp"
      #include <iostream>
      
      using std::cin;
      using std::cout;
      
      void output(const vectorInt &vi) {
          for(auto i = 0; i < vi.get_size(); ++i)
              cout << vi.at(i) << ", ";
          cout << "\b\b \n";
      }
      
      
      void test1() {
          int n;
          cout << "Enter n: ";
          cin >> n;
      
          vectorInt x1(n);
          for(auto i = 0; i < n; ++i)
              x1.at(i) = i*i;
          cout << "x1: ";  output(x1);
      
          vectorInt x2(n, 42);
          vectorInt x3(x2);
          x2.at(0) = -999;
          cout << "x2: ";  output(x2);
          cout << "x3: ";  output(x3);
      }
      
      void test2() {
          const vectorInt  x(5, 42);
          vectorInt y(10, 0);
      
          cout << "y: ";  output(y);
          y.assign(x);
          cout << "y: ";  output(y);
          
          cout << "x.at(0) = " << x.at(0) << endl;
          cout << "y.at(0) = " << y.at(0) << endl;
      }
      
      int main() {
          cout << "測試1: \n";
          test1();
      
          cout << "\n測試2: \n";
          test2();
      }

      問題1:深復制

      問題2:不能正確運行,左操作數必須為左值。存在安全隱患。

      問題3:可以,但會占用額外內存。

      任務4:

       Matrix.h:

      #pragma once
      
      #include <iostream>
      #include <cassert>
      
      using std::cout;
      using std::endl;
      
      // 類Matrix的聲明
      class Matrix {
      public:
          Matrix(int n, int m);           // 構造函數,構造一個n*m的矩陣, 初始值為value
          Matrix(int n);                  // 構造函數,構造一個n*n的矩陣, 初始值為value
          Matrix(const Matrix &x);        // 復制構造函數, 使用已有的矩陣X構造
          ~Matrix();
      
          void set(const double *pvalue);         // 用pvalue指向的連續內存塊數據按行為矩陣賦值
          void clear();                           // 把矩陣對象的值置0
          
          const double& at(int i, int j) const;   // 返回矩陣對象索引(i,j)的元素const引用
          double& at(int i, int j);               // 返回矩陣對象索引(i,j)的元素引用
          
          int get_lines() const;                  // 返回矩陣對象行數
          int get_cols() const;                   // 返回矩陣對象列數
      
          void display() const;                    // 按行顯示矩陣對象元素值
      
      private:
          int lines;      // 矩陣對象內元素行數
          int cols;       // 矩陣對象內元素列數
          double *ptr;
      };
      
      // 類Matrix的實現:待補足
      // xxx

      Matrix.cpp:

      #include <iostream>
      #include "Matrix.h"
      
      Matrix::Matrix(int n, int m) : lines(n), cols(m) {
          ptr = new double[n * m];
      }
      
      Matrix::Matrix(int n) : lines(n), cols(n) {
          ptr = new double[n * n];
      }
      
      Matrix::Matrix(const Matrix &x) : lines(x.lines), cols(x.cols) {
          ptr = new double[lines * cols];
          std::copy(x.ptr, x.ptr + lines * cols, ptr);
      }
      
      Matrix::~Matrix() {
          delete[] ptr;
      }
      
      void Matrix::set(const double *pvalue) {
          std::copy(pvalue, pvalue + lines * cols, ptr);
      }
      
      void Matrix::clear() {
          std::fill(ptr, ptr + lines * cols, 0);
      }
      
      const double& Matrix::at(int i, int j) const {
          assert(i >= 0 && i < lines && j >= 0 && j < cols);
          return ptr[i * cols + j];
      }
      
      double& Matrix::at(int i, int j) {
          assert(i >= 0 && i < lines && j >= 0 && j < cols);
          return ptr[i * cols + j];
      }
      
      int Matrix::get_lines() const {
          return lines;
      }
      
      int Matrix::get_cols() const {
          return cols;
      }
      
      void Matrix::display() const {
          for (int i = 0; i < lines; ++i) {
              for (int j = 0; j < cols; ++j) {
                  cout << ptr[i * cols + j] << " ";
              }
              cout << endl;
          }
      }

      task4.cpp:

      #include "Matrix.h"
      #include <iostream>
      #include <cassert>
      
      using std::cin;
      using std::cout;
      using std::endl;
      
      
      const int N = 1000;
      
      // 輸出矩陣對象索引為index所在行的所有元素
      void output(const Matrix &m, int index) {
          assert(index >= 0 && index < m.get_lines());
      
          for(auto j = 0; j < m.get_cols(); ++j)
              cout << m.at(index, j) << ", ";
          cout << "\b\b \n";
      }
      
      
      void test1() {
          double x[1000] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
      
          int n, m;
          cout << "Enter n and m: ";
          cin >> n >> m;
      
          Matrix m1(n, m);    // 創建矩陣對象m1, 大小n×m
          m1.set(x);          // 用一維數組x的值按行為矩陣m1賦值
      
          Matrix m2(m, n);    // 創建矩陣對象m1, 大小m×n
          m2.set(x);          // 用一維數組x的值按行為矩陣m1賦值
      
          Matrix m3(2);       // 創建一個2×2矩陣對象
          m3.set(x);          // 用一維數組x的值按行為矩陣m4賦值
      
          cout << "矩陣對象m1: \n";   m1.display();  cout << endl;
          cout << "矩陣對象m2: \n";   m2.display();  cout << endl;
          cout << "矩陣對象m3: \n";   m3.display();  cout << endl;
      }
      
      void test2() {
          Matrix m1(2, 3);
          m1.clear();
          
          const Matrix m2(m1);
          m1.at(0, 0) = -999;
      
          cout << "m1.at(0, 0) = " << m1.at(0, 0) << endl;
          cout << "m2.at(0, 0) = " << m2.at(0, 0) << endl;
          cout << "矩陣對象m1第0行: "; output(m1, 0);
          cout << "矩陣對象m2第0行: "; output(m2, 0);
      }
      
      int main() {
          cout << "測試1: \n";
          test1();
      
          cout << "測試2: \n";
          test2();
      }

      任務5:

       user.hpp

      #ifndef USER_HPP
      #define USER_HPP
      
      #include <iostream>
      #include <string>
      
      class User {
      private:
          std::string name;
          std::string password;
          std::string email;
      
      public:
          User(const std::string& name, const std::string& password = "123456", const std::string& email = "")
              : name(name), password(password), email(email) {}
      
          void set_email() {
              std::string input;
              do {
                  std::cout << "Enter email address: ";
                  std::cin >> input;
                  if (input.find('@') != std::string::npos) {
                      email = input;
                      std::cout << "email is set successfully..." << std::endl;
                  } else {
                      std::cout << "illegal email. Please re-enter email.";
                  }
              } while (input.find('@') == std::string::npos);
          }
      
          void change_password() {
              std::string old_password;
              int attempts = 0;
              while (attempts < 3) {
                  std::cout << "Enter old password: ";
                  std::cin >> old_password;
                  if (old_password == password) {
                      std::string new_password;
                      std::cout << "Enter new password: ";
                      std::cin >> new_password;
                      std::cout << "new password is set successfully..." << std::endl;
                      password = new_password;
                      return;
                  } else {
                      attempts++;
                      if (attempts < 3) {
                          std::cout << "password input error. Please re-enter angain."; 
                      }
                      else{
                          std::cout << "password input error. Please try after a while." << std::endl;
                      }
                  }
              }
          }
      
          void display() const {
              std::cout << "\nUsername: " << name << "\npass: " << std::string(password.length(), '*') << "\nemail: " << email << std::endl;
          }
      };
      
      #endif 

      task5.cpp

      #include "user.hpp"
      #include <iostream>
      #include <vector>
      #include <string>
      
      using std::cin;
      using std::cout;
      using std::endl;
      using std::vector;
      using std::string;
      
      void test() {
          vector<User> user_lst;
      
          User u1("Alice", "2024113", "Alice@hotmail.com");
          user_lst.push_back(u1);
          cout << endl;
      
          User u2("Bob");
          u2.set_email();
          u2.change_password();
          user_lst.push_back(u2);
          cout << endl;
      
          User u3("Hellen");
          u3.set_email();
          u3.change_password();
          user_lst.push_back(u3);
          cout << endl;
      
          cout << "There are " << user_lst.size() << " users. they are: " << endl;
          for(auto &i: user_lst) {
              i.display();
              cout << endl;
          }
      }
      
      int main() {
          test();
      }

      任務6:

      date.h

      #ifndef __DATE_H__
      #define __DATE_H__
       class Date {
      private:
               int year; 
               int month;
               int day;
               int totalDays;
       public:
               Date(int year, int month, int day);
               int getYear() const { return year; }
               int getMonth() const { return month; }
               int getDay() const { return day; }
               int getMaxDay() const;
               bool isLeapYear() const {
                           return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
          }
           void show() const;
               int distance(const Date & date) const {
              return totalDays - date.totalDays;
          }
      };
       #endif 

      date.cpp

      #include "date.h"
      #include <iostream>
      #include <cstdlib>
      using namespace std;
      namespace {
              const int DAYS_BEFORE_MONTH[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 356 };
      }
      Date::Date(int year, int month, int day) :year(year), month(month), day(day) {
          if (day <= 0 || day > getMaxDay()) {
              cout << "Invalid date: ";
              show();
              cout << endl;
              exit(1);
          }
          int years = year - 1;
          totalDays = years * 365 + years / 4 - years / 100 + years / 400 + DAYS_BEFORE_MONTH[month - 1] + day;
          if (isLeapYear() && month > 2) totalDays++;
      }
      int Date::getMaxDay() const {
          if (isLeapYear() && month == 2) return 29;
          else return DAYS_BEFORE_MONTH[month] - DAYS_BEFORE_MONTH[month - 1];
      }
      void Date::show() const {
          cout << getYear() << "-" << getMonth() << "-" << getDay();
      }

      account.h

      #ifndef __ACCOUNT_H__
      #define __ACCOUNT_H__
      #include "date.h"
      #include <string>
      class SavingsAccount {
       private:
          std::string id;
              double balance;
              double rate;
              Date lastDate;
              double accumulation;
              static double total;
              void record(const Date & date, double amount, const std::string & desc);
              void error(const std::string & msg) const;
              double accumulate(const Date & date) const {
              return accumulation + balance * date.distance(lastDate);
          }
      public:
              SavingsAccount(const Date & date, const std::string & id, double rate);
              const std::string & getId() const { return id; } 
              double getBalance() const { return balance; } 
              double getRate() const { return rate; }
          static double getTotal() { return total; }
       void deposit(const Date & date, double amount, const std::string & desc);
              void withdraw(const Date & date, double amount, const std::string & desc);
              void settle(const Date & date); 
              void show() const;
      };
      #endif 

      account.cpp

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

      6_25.cpp

      #include "account.h"
      #include <iostream>
      using namespace std;
      int main() {
          Date date(2008, 11, 1);
              SavingsAccount accounts[] = {
             SavingsAccount(date, "03755217", 0.015),
             SavingsAccount(date, "02342342", 0.015)
           };
              accounts[0].deposit(Date(2008, 11, 5), 5000, "salary");
          accounts[1].deposit(Date(2008, 11, 25), 10000, "sell stock 0323");
          accounts[0].deposit(Date(2008, 12, 5), 5500, "salary");
          accounts[1].withdraw(Date(2008, 12, 20), 4000, "buy a laptop");
              cout << endl;
          for (int i = 0; i < sizeof(accounts) / sizeof(SavingsAccount); i++) {
              accounts[i].settle(Date(2009, 1, 1));
              accounts[i].show();
              cout << endl;
          }
          cout << "Total: " << SavingsAccount::getTotal() << endl;
          return 0;
      }

       

      posted on 2024-11-10 19:56  陸一鳴·  閱讀(13)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产边打电话边被躁视频| 国产欧美精品一区aⅴ影院| 欧美激情一区二区三区成人| 国内精品九九久久久精品| 东方四虎在线观看av| 久久亚洲精品无码va白人极品| 天堂网亚洲综合在线| 国产一区国产二区在线视频| 日本免费人成视频在线观看| 中文字幕日韩有码一区| 久久99久久99精品免视看国产成人 | 正在播放国产真实哭都没用| 2020精品自拍视频曝光| 国产精品国产精品国产精品| 久久夜色精品亚洲国产av| 在线视频精品中文无码| 亚洲在战av极品无码| 午夜精品福利一区二区三| 国产亚洲999精品AA片在线爽| 久久99日韩国产精品久久99| 美腿丝袜亚洲综合在线视频 | 一本加勒比hezyo无码专区| 我要看亚洲黄色太黄一级黄| 男女激情一区二区三区| 国产自产av一区二区三区性色| 最新亚洲av日韩av二区| 国产成人精品一区二区不卡| 国内精品视频区在线2021 | Y111111国产精品久久久| 国产乱码1卡二卡3卡四卡5 | a毛片免费在线观看| 国产在线一区二区不卡| 夜夜爽77777妓女免费看| 97在线观看视频免费| 99久久精品国产一区二区蜜芽| 国产人妻精品午夜福利免费| japanese无码中文字幕| 欧美激情一区二区三区成人| 亚洲在战av极品无码| 国产精品免费观看色悠悠| 亚洲欧美日韩综合久久久|