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

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

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

      任務1:

      源代碼task1.cpp

      #include "T.h"
      #include <iostream>
      
      void test_T();
      
      int main() {
          std::cout << "test Class T: \n";
          test_T();
      
          std::cout << "\ntest friend func: \n";
          func();
      }
      
      void test_T() {
          using std::cout;
          using std::endl;
      
          cout << "T info: " << T::doc << endl;
          cout << "T objects'max count: " << T::max_cnt << endl;
          cout << "T objects'current count: " << T::get_cnt() << endl << endl;
      
          T t1;
          cout << "t1 = "; t1.display(); cout << endl;
      
          T t2(3, 4);
          cout << "t2 = "; t2.display(); cout << endl;
      
          T t3(t2);
          t3.adjust(2);
          cout << "t3 = "; t3.display(); cout << endl;
      
          T t4(std::move(t2));
          cout << "t4 = "; t4.display(); cout << endl;
      
          cout << "test: T objects'current count: " << T::get_cnt() << endl;
      }

      T.h

      #pragma once
      
      #include <string>
      
      // 類T: 聲明
      class T {
      // 對象屬性、方法
      public:
          T(int x = 0, int y = 0);   // 普通構造函數
          T(const T &t);  // 復制構造函數
          T(T &&t);       // 移動構造函數
          ~T();           // 析構函數
      
          void adjust(int ratio);      // 按系數成倍調整數據
          void display() const;           // 以(m1, m2)形式顯示T類對象信息
      
      private:
          int m1, m2;
      
      // 類屬性、方法
      public:
          static int get_cnt();          // 顯示當前T類對象總數
      
      public:
          static const std::string doc;       // 類T的描述信息
          static const int max_cnt;           // 類T對象上限
      
      private:
          static int cnt;         // 當前T類對象數目
      
      // 類T友元函數聲明
          friend void func();
      };
      
      // 普通函數聲明
      void func();

      T.cpp

      #include "T.h"
      #include <iostream>
      #include <string>
      
      // 類T實現
      
      // static成員數據類外初始化
      const std::string T::doc{"a simple class sample"};
      const int T::max_cnt = 999;
      int T::cnt = 0;
      
      // 類方法
      int T::get_cnt() {
         return cnt;
      }
      
      // 對象方法
      T::T(int x, int y): m1{x}, m2{y} { 
          ++cnt; 
          std::cout << "T constructor called.\n";
      } 
      
      T::T(const T &t): m1{t.m1}, m2{t.m2} {
          ++cnt;
          std::cout << "T copy constructor called.\n";
      }
      
      T::T(T &&t): m1{t.m1}, m2{t.m2} {
          ++cnt;
          std::cout << "T move constructor called.\n";
      }    
      
      T::~T() {
          --cnt;
          std::cout << "T destructor called.\n";
      }           
      
      void T::adjust(int ratio) {
          m1 *= ratio;
          m2 *= ratio;
      }    
      
      void T::display() const {
          std::cout << "(" << m1 << ", " << m2 << ")" ;
      }     
      
      // 普通函數實現
      void func() {
          T t5(42);
          t5.m2 = 2049;
          std::cout << "t5 = "; t5.display(); std::cout << '\n';
      }

      運行結果截圖:

      屏幕截圖 2025-10-24 105019

      問題1:YES

      問題2:普通構造函數初始化對象,復制構造函數用已有對象初始化新對象,移動構造函數轉移右值對象資源,析構函數清理對象資源,它們分別在對象創建、拷貝 / 傳值返回、右值初始化、對象生命周期結束時調用。

      問題3:YES

      任務2:

      源代碼task3.cpp

      #include "Complex.h"
      #include <iostream>
      #include <iomanip>
      #include <complex>
      void test_Complex();
      void test_std_complex();
      int main() {
          std::cout << "*******測試1:自定義類Complex*******\n";
          test_Complex();
          std::cout << "\n*******測試2:標準庫模板類complex*******\n";
          test_std_complex();
          return 0;
      }
      
      void test_Complex() {
          using namespace std;
          cout << "類成員測試:\n";
          cout << Complex::doc << "\n\n";
          cout << "Complex對象測試:\n";
          Complex c1;
          Complex c2(3, -4);
          Complex c3(c2);
          Complex c4 = c2;
          const Complex c5(3.5);
      
          cout << "c1 = "; output(c1); cout << endl;
          cout << "c2 = "; output(c2); cout << endl;
          cout << "c3 = "; output(c3); cout << endl;
          cout << "c4 = "; output(c4); cout << endl;
          cout << "c5.real = " << c5.get_real() 
               << ", c5.imag = " << c5.get_imag() << "\n\n";
          cout << "復數運算測試:\n";
          cout << "abs(c2) = " << abs(c2) << endl;
          c1.add(c2);
          cout << "c1 += c2, c1 = "; output(c1); cout << endl;
          cout << boolalpha;
          cout << "c1 == c2 : " << is_equal(c1, c2) << endl;
          cout << "c1 != c2 : " << is_not_equal(c1, c2) << endl;
          Complex c6 = add(c2, c3);
          cout << "c4 = c2 + c3, c4 = "; output(c6); cout << endl;
      }
      
      void test_std_complex() {
          using namespace std;
          cout << "std::complex<double>對象測試:\n";
          complex<double> c1;
          complex<double> c2(3, -4);
          complex<double> c3(c2);
          complex<double> c4 = c2;
          const complex<double> c5(3.5);
          cout << "c1 = " << c1 << endl;
          cout << "c2 = " << c2 << endl;
          cout << "c3 = " << c3 << endl;
          cout << "c4 = " << c4 << endl;
          cout << "c5.real = " << c5.real() 
               << ", c5.imag = " << c5.imag() << "\n\n";
          cout << "復數運算測試:\n";
          cout << "abs(c2) = " << abs(c2) << endl;
          c1 += c2;
          cout << "c1 += c2, c1 = " << c1 << endl;
          cout << boolalpha;
          cout << "c1 == c2 : " << (c1 == c2) << endl;
          cout << "c1 != c2 : " << (c1 != c2) << endl;
          complex<double> c6 = c2 + c3;
          cout << "c4 = c2 + c3, c4 = " << c6 << endl;
      }

      Complex.cpp

      #include "Complex.h"
      #include <cmath>
      const std::string Complex::doc = "a simplified complex class";
      Complex::Complex() : rea(0.0), imag(0.0) {}
      Complex::Complex(double r) : rea(r), imag(0.0) {}
      Complex::Complex(double r, double i) : rea(r), imag(i) {}
      Complex::Complex(const Complex& other) : rea(other.rea), imag(other.imag) {}
      double Complex::get_real() const {
          return rea;
      }
      double Complex::get_imag() const {
          return imag;
      }
      void Complex::add(const Complex& other) {
          rea += other.rea;
          imag += other.imag;
      }
      double abs(const Complex& c) {
          return std::sqrt(c.rea * c.rea + c.imag * c.imag);
      }
      Complex add(const Complex& c1, const Complex& c2) {
          Complex res;
          res.rea = c1.rea + c2.rea;
          res.imag = c1.imag + c2.imag;
          return res;
      }
      bool is_equal(const Complex& c1, const Complex& c2) {
          return (c1.rea == c2.rea) && (c1.imag == c2.imag);
      }
      bool is_not_equal(const Complex& c1, const Complex& c2) {
          return !is_equal(c1, c2);
      }
      void output(const Complex& c) {
          if (c.imag >= 0) {
              std::cout << c.rea << " + " << c.imag << "i";
          } else {
              std::cout << c.rea << " - " << -c.imag << "i";
          }
      }

      Complex.h

      #ifndef COMPLEX_H
      #define COMPLEX_H
      #include <string>
      #include <iostream>
      class Complex {
      public:
          static const std::string doc;
          Complex();
          Complex(double r);
          Complex(double r, double i);
          Complex(const Complex& other);
          double get_real() const;
          double get_imag() const;
          void add(const Complex& other);
          friend double abs(const Complex& c);
          friend Complex add(const Complex& c1, const Complex& c2);
          friend bool is_equal(const Complex& c1, const Complex& c2);
          friend bool is_not_equal(const Complex& c1, const Complex& c2);
          friend void output(const Complex& c);
      private:
          double rea;
          double imag;
      };
      #endif

      運行結果截圖

      屏幕截圖 2025-10-28 140722

      屏幕截圖 2025-10-28 140714

      問題一:標準庫模板類complex更簡潔,有。

      問題二:2-1:是。因為output需訪問私有數據輸出,abs需訪問私有數據計算模長,add需訪問私有數據進行復數相加,所以必須通過友元訪問私有成員。

      2-2:是

      2-3:否。std::complex通過公有成員函數real()imag()提供實部和虛部的訪問。

      問題三:在類Complex中顯式刪除復制構造函數,聲明為Complex(const Complex&) = delete;,這樣當出現Complex c4 = c2;形式的構造時,編譯器會報錯,從而禁用該構造形式。

      任務3:

      源代碼task3.cpp

      #include "PlayerControl.h"
      #include <iostream>
      void test() {
      PlayerControl controller;
      std::string control_str;
      std::cout << "Enter Control: (play/pause/next/prev/stop/quit):\n";
      while(std::cin >> control_str) {
      if(control_str == "quit")
      break;
      ControlType cmd = controller.parse(control_str);
      controller.execute(cmd);
      std::cout << "Current Player control: " << PlayerControl::get_cnt() << "\n\n";
      }
      }
      int main() {
      test();
      }

      PlayControl.cpp

      #include "PlayerControl.h"
      #include <iostream>
      #include <algorithm>
      #include <cctype>
      
      int PlayerControl::total_cnt = 0;
      
      PlayerControl::PlayerControl() {}
      
      ControlType PlayerControl::parse(const std::string& control_str) {
          std::string lower_str = control_str;
          std::transform(lower_str.begin(), lower_str.end(), lower_str.begin(),
                         [](unsigned char c) { return std::tolower(c); });
          ControlType result = ControlType::Unknown;
          if (lower_str == "play") {
              result = ControlType::Play;
          } else if (lower_str == "pause") {
              result = ControlType::Pause;
          } else if (lower_str == "next") {
              result = ControlType::Next;
          } else if (lower_str == "prev") {
              result = ControlType::Prev;
          } else if (lower_str == "stop") {
              result = ControlType::Stop;
          } else {
              result = ControlType::Unknown;
          }
          if (result != ControlType::Unknown) {
              total_cnt++;
          }   
          return result;
      }
      void PlayerControl::execute(ControlType cmd) const {
          switch (cmd) {
              case ControlType::Play:   std::cout << "[play] Playing music...\n"; break;
              case ControlType::Pause:  std::cout << "[Pause] Music paused\n"; break;
              case ControlType::Next:   std::cout << "[Next] Skipping to next track\n"; break;
              case ControlType::Prev:   std::cout << "[Prev] Back to previous track\n"; break;
              case ControlType::Stop:   std::cout << "[Stop] Music stopped\n"; break;
              default:                  std::cout << "[Error] unknown control\n"; break;
          }
      }
      int PlayerControl::get_cnt() {
          return total_cnt;
      }

      PlayControl.h

      #pragma once
      #include <string>
      enum class ControlType {Play, Pause, Next, Prev, Stop, Unknown};
      class PlayerControl {
      public:
      PlayerControl();
      ControlType parse(const std::string& control_str); 
      void execute(ControlType cmd) const; 
      static int get_cnt();
      private:
      static int total_cnt;
      }; 

      運行結果截圖

      屏幕截圖 2025-10-28 215831

      任務4:

      源代碼task4.cpp

       

      posted on 2025-10-28 22:30  mm77777  閱讀(7)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 免费AV片在线观看网址| 无码人妻精品一区二区三区东京热| 国产精品美女一区二区三| 国产最大成人亚洲精品| 99热国产这里只有精品9| 国产精品爽爽v在线观看无码| 日韩有码中文字幕国产| 国内揄拍国内精品对久久| 精品久久久久久成人AV| 国产成人精品永久免费视频| 伊人久久大香线蕉网av| 综合色在线| 欧美人成在线播放网站免费| 亚洲欧美电影在线一区二区| 久久SE精品一区精品二区| 兖州市| 老熟女多次高潮露脸视频| 中文字幕人妻无码一夲道| 尤物yw193无码点击进入| 一本久久a久久精品综合| 成人一区二区三区在线午夜| 国产女同一区二区在线| 久久香蕉欧美精品| 国内精品自产拍在线播放| 婷婷99视频精品全部在线观看| 黄色免费在线网址| 日本熟妇乱一区二区三区| 光棍天堂在线手机播放免费| 国产蜜臀在线一区二区三区| 欧美日韩国产亚洲沙发| 国产精品美女网站| 江阴市| 久久精品国产99麻豆蜜月| 欧美性猛交xxxx乱大交丰满| 亚洲日韩国产成网在线观看| 麻江县| 日韩精品亚洲精品第一页| 亚洲精品国产综合麻豆久久99| 国内视频偷拍一区,二区,三区| 亚洲色婷婷久久精品av蜜桃久久| 日韩一本不卡一区二区三区 |