国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++ 學(xué)習(xí)筆記、01 | 開發(fā)簡單職工管理系統(tǒng)遇到的一些問題

這篇具有很好參考價值的文章主要介紹了C++ 學(xué)習(xí)筆記、01 | 開發(fā)簡單職工管理系統(tǒng)遇到的一些問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

記錄開發(fā)簡單職工管理系統(tǒng)遇到的一些問題,黑馬教程
https://www.bilibili.com/video/BV1et411b73Z P147 ~ P166

頭文件與源文件

  • 頭文件只聲明,源文件來實現(xiàn)(本質(zhì)上是類內(nèi)聲明類外實現(xiàn))
  • 源文件需要引用特定的頭文件
ifndef OOPFINAL_WORKER_H
#define OOPFINAL_WORKER_H

#include <iostream>
#include <string>

using namespace std;

class Worker {
public:
    virtual void ShowInfo() = 0;

    virtual string getDeptName() = 0;

    int m_Id;
    string m_Name;
    int m_DeptId;
};

#endif //OOPFINAL_WORKER_H
#ifndef OOPFINAL_MANAGER_H
#define OOPFINAL_MANAGER_H

#include <bits/stdc++.h>
#include "Worker.h"

using namespace std;

class Manager : public Worker {
public:
    Manager(int id, string name, int dId);

    void ShowInfo() override;

    string getDeptName() override;
};

#endif //OOPFINAL_MANAGER_H
#include "../headers/Manager.h"

void Manager::ShowInfo() {
    cout << "職工編號 " << m_Id << "\t職工姓名 "
         << m_Name << "\t崗位 " << getDeptName() << "\t崗位職責(zé):完成老板交給的任務(wù),并下發(fā)任務(wù)給普通員工" << endl;
}

string Manager::getDeptName() {
    return "經(jīng)理";
}

Manager::Manager(int id, string name, int dId) {
    this->m_Id = id;
    this->m_Name = name;
    this->m_DeptId = dId;
}


頭文件重復(fù)引用

#ifndef,#define,#endif

#ifndef 的方式依賴于宏名字不能沖突(最好采用這種方式

  • 保證同一個文件只會被編譯一次
  • 內(nèi)容完全相同的兩個文件只會編譯其中一個一次

#pragma once

同一個文件不會被編譯多次(物理上的同一個文件,不是指內(nèi)容相同的兩個文件)


要求整數(shù)卻輸入字符

這種情況下會標(biāo)志位 failbit 被置 1,字符一直在緩沖區(qū)中,沒被讀出,可能出現(xiàn)死循環(huán)

  • cin.restate() 當(dāng)cin.rdstate()返回 0 (即ios::goodbit)時表示無錯誤,可以繼續(xù)輸入或者操作,若返回4則發(fā)生非致命錯誤即ios::failbit,則不能繼續(xù)輸入或操作

  • cin.fail() 可以判斷流操作是否失敗,輸入錯誤后,cin.fail()返回為真 錯誤流標(biāo)志位被置failbit為true, 當(dāng)恢復(fù)時 failbit被設(shè)置為false

  • cin.clear() (默認(rèn)為0 ,即無錯誤)清除錯誤的標(biāo)志位

    clear有多種狀態(tài)

    • goodbit 無錯誤
    • Eofbit 已到達(dá)文件尾
    • failbit 非致命的輸入/輸出錯誤,可挽回
    • badbit 致命的輸入/輸出錯誤,無法挽回 若在輸入輸出類里.需要加ios::標(biāo)識符號
    • 通過設(shè)置cin.clear() 或 cin.clear(istream::goodbit)清除錯誤狀態(tài)
  • cin.ignore() 清除緩沖區(qū)

如果輸入錯誤,通過cin.clear()清除了錯誤狀態(tài)標(biāo)志后,下一次cin輸入時,仍會從緩沖區(qū)中讀取數(shù)據(jù),而之前的錯誤輸入此時仍存在緩沖區(qū)中,所以還會再次被讀取造成錯誤,所以要清空緩沖區(qū)

  • cin.ignore(要清除的字節(jié)長度,標(biāo)識)

cin.ignore(1024,’\n’)
該函數(shù)就是將選中的字節(jié)取出拋棄掉(cin操作時是以char為單位的)
標(biāo)識清除的最大長度是1024個字節(jié)。
清除時如果遇到‘\n’就停止,不管是否是1024個字節(jié)。
如果沒有遇到‘\n’就只清除1024個
cin.ignore()的默認(rèn)參數(shù)為cin.ignore(1,EOF),及清除文件描述符前一個字節(jié)

cout << "輸入選擇" << endl;
while (cin >> choice, cin.fail()) {
    cout << "輸入有誤,請重新輸入" << endl;
    cin.clear();  // 清除錯誤標(biāo)志位
    cin.ignore(); // 清除緩沖區(qū)
}

Delete[]

在09講,添加職工函數(shù)中,老師釋放了數(shù)組空間,但沒釋放數(shù)組元素的空間,為什么?

  • 依舊需要原來的數(shù)組元素,在釋放數(shù)組前執(zhí)行了原有元素地址的拷貝
  • 新數(shù)組 = 舊數(shù)組元素 + 新添加的數(shù)組元素

以下旨在探究 Delete 數(shù)組,會不會調(diào)用數(shù)組元素的析構(gòu)器

答案是不會,需要自己手動調(diào)用

#include <iostream>

using namespace std;

class Father {
public:
    Father() = default;

    virtual ~Father() {
        cout << "父元素析構(gòu)器" << endl;
    };

};

class Son1 : public Father {
public:
    ~Son1() {
        cout << "一號子類析構(gòu)器" << endl;
    }
};

class Son2 : public Father {
public:
    ~Son2() {
        cout << "二號子類析構(gòu)器" << endl;
    }
};


int main() {
    Father **array = new Father *[10];
    array[0] = new Son1();
    array[1] = new Son2();
    array[2] = new Son2();
//    delete array[0];
//    delete array[1];
//    delete array[2];
    delete[] array;

    cout << "---------" << endl;
    Father *test = new Son1();
    delete test;
    return 0;
}

文件存在且數(shù)據(jù)為空

  • 判斷文件是否被打開
  • 讀入一個字符,判斷字符是不是文件尾部標(biāo)志

ifs.eof() 判斷是要在讀取到文件結(jié)束符之后才會置為true,意思也就是說即使打開一個空文件,你不讀取里面的數(shù)據(jù),ifs.eof() 會默認(rèn)置為false

peek() 嘗試讀取第一個字符,但不提?。ü鈽?biāo)位不后移)

//  char ch;
//  ifs >> ch;
    ifs.peek();
if (ifs.eof()) {
    // 文件為空
    cout << "文件為空" << endl;
    m_EmpArray = NULL;
    m_EmpNum = 0;
    this->m_FileIsEmpty = true;
    ifs.close();
    return;
}

ifstream 回到文件頭

使用 ifstream 進(jìn)行文本文件讀取時,如果讀指針位于文件末尾,無法直接通過調(diào)用seekg(0, ios::beg) 回到文件開頭,而是需要先調(diào)用 clear() 清除指針狀態(tài),再調(diào)用seekg(0, ios::beg) 才能成功返回文件頭

  • ios::beg 默認(rèn)的,從流的開頭開始定位
  • ios::cur 從流的當(dāng)前位置開始定位
  • ios::end 從流的末尾開始定位

override

override明確地表示一個函數(shù)是對基類中一個虛函數(shù)的重載。更重要的是,它會檢查基類虛函數(shù)和派生類中重載函數(shù)的簽名不匹配問題。如果簽名不匹配,編譯器會發(fā)出錯誤信息。


=default

=default 是C++11引入的一種特性,它允許顯式要求編譯器生成默認(rèn)的特殊成員函數(shù)。特殊成員函數(shù)包括默認(rèn)構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)、移動構(gòu)造函數(shù)、復(fù)制賦值運(yùn)算符、移動賦值運(yùn)算符以及析構(gòu)函數(shù)


參考資料

cplusplus.com/reference/istream/istream/seekg/

Set Position with seekg() in C++ File Handling - GeeksforGeeks

cin輸入的類型不匹配造成的死循環(huán)CSDN博客

C++-關(guān)鍵字:override(重寫)

【#ifndef, #define, 和 #endif】

c++新特性:=default - 知乎 (zhihu.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-709822.html

到了這里,關(guān)于C++ 學(xué)習(xí)筆記、01 | 開發(fā)簡單職工管理系統(tǒng)遇到的一些問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++學(xué)習(xí)筆記(七)——學(xué)生信息管理系統(tǒng)

    C++學(xué)習(xí)筆記(七)——學(xué)生信息管理系統(tǒng)

    前言 大致功能概況 具體代碼實現(xiàn) 登錄學(xué)生系統(tǒng)模塊 創(chuàng)建學(xué)生信息模塊 顯示學(xué)生信息模塊 保存學(xué)生信息模塊 讀取學(xué)生信息模塊 增添學(xué)生信息模塊 刪除學(xué)生信息模塊 查找學(xué)生信息模塊 修改學(xué)生信息模塊 插入學(xué)生信息模塊 學(xué)生成績排序模塊 前面已經(jīng)學(xué)了C++的類和對象,對

    2024年02月11日
    瀏覽(22)
  • 程序設(shè)計職工管理系統(tǒng)

    程序設(shè)計職工管理系統(tǒng)

    本系統(tǒng)要求用 C 語言建立 一個職工信息管理系統(tǒng) ,本職工信息管理系統(tǒng)可以實現(xiàn)對眾多員工信息 的管理 。 包含 對 職工信息 進(jìn)行 添加 、 查詢 、 刪除 、修改 。 1.2 系統(tǒng)的界面要求? 按任意鍵便可以進(jìn)入主菜單,在主菜單上顯示出 該系統(tǒng) 的功能,通過輸入數(shù)字 0 到 6 ?來

    2024年02月08日
    瀏覽(19)
  • 職工信息管理系統(tǒng)(C語言)

    職工信息管理系統(tǒng)(C語言)

    目錄 1.前言 2.實現(xiàn)功能 3.流程圖? 4.源碼 5.總結(jié) ? ? ? ? 距學(xué)習(xí)C語言已經(jīng)相當(dāng)長的一段時間了,編寫一個小項目,功能實現(xiàn)可能不是很完美,算是復(fù)習(xí)和記錄吧! 0.錄入職工信息? ? ? ? ? ? ? ? ? ? ? 1.按工資高低排序 2.修改職工信息 3.顯示職工信息 4.刪除職工信息 5.查詢

    2024年02月11日
    瀏覽(18)
  • c++學(xué)習(xí)筆記-STL案例-機(jī)房預(yù)約系統(tǒng)4-管理員模塊

    c++學(xué)習(xí)筆記-STL案例-機(jī)房預(yù)約系統(tǒng)4-管理員模塊

    前言 銜接上一篇“c++學(xué)習(xí)筆記-STL案例-機(jī)房預(yù)約系統(tǒng)3-登錄模塊”,本文主要設(shè)計管理員模塊,從管理員登錄和注銷、添加賬號、顯示賬號、查看機(jī)房、清空預(yù)約五個功能進(jìn)行分析和實現(xiàn)。 目錄 7 管理員模塊 7.1 管理員登錄和注銷 7.1.1 構(gòu)造函數(shù) ?編輯7.1.2 管理員子菜單 7.1.

    2024年01月19日
    瀏覽(17)
  • C語言課程設(shè)計_職工工資管理系統(tǒng)

    C語言課程設(shè)計_職工工資管理系統(tǒng)

    設(shè)計一個職工工資管理系統(tǒng): (1)輸入記錄:將每一個職工的姓名、ID號以及基本工資、職務(wù)工資、崗位津貼、醫(yī)療保險、公積金的數(shù)據(jù)作為一個記錄。該軟件能建立一個新的數(shù)據(jù)文件或給已建立好的數(shù)據(jù)文件增加記錄。 (2)顯示記錄:根據(jù)用戶提供的記錄或者根據(jù)職工姓名

    2024年02月10日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)C/C++ 職工信息管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)C/C++ 職工信息管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)C/C++ 職工信息管理系統(tǒng) 一、前言 二、系統(tǒng)結(jié)構(gòu)設(shè)計 三、模塊功能代碼 3.1 菜單函數(shù) 3.2?初始化單鏈表 3.3 添加信息 3.4 信息輸出 3.5 信息排序 3.6 信息刪除 3.7 信息存儲 四、系統(tǒng)完整代碼 五、運(yùn)行結(jié)果(部分展示) 六、實驗總結(jié) 七、參考網(wǎng)址 本文還是使用較老的

    2024年01月16日
    瀏覽(14)
  • 37基于java的職工管理系統(tǒng)設(shè)計與實現(xiàn)

    本章節(jié)給大家?guī)硪粋€基于java的職工管理系統(tǒng)設(shè)計與實現(xiàn),可適用于員工管理系統(tǒng),企業(yè)員工管理系統(tǒng),公司員工管理系統(tǒng),企業(yè)人事管理系統(tǒng),基于java職工管理系統(tǒng),前后端分離,員工考勤管理系統(tǒng),職工獎懲管理系統(tǒng),職員合同管理,HR管理系統(tǒng),人事HR管理系統(tǒng)等;

    2024年02月05日
    瀏覽(13)
  • QT5實現(xiàn)職工工資信息管理系統(tǒng)(文件讀寫)

    QT5實現(xiàn)職工工資信息管理系統(tǒng)(文件讀寫)

    暑期學(xué)校QT實踐項目 該系統(tǒng)需創(chuàng)建和管理如下信息:1、職工信息:工號、姓名、年齡、入職日期、電話、住址、月工資數(shù)據(jù)集。2、月工資信息:月份、基本工資、崗位工資、工齡工資、津貼、崗貼、補(bǔ)貼、房貼、交通補(bǔ)貼。 系統(tǒng)功能要求如下: 1.創(chuàng)建和管理職工信息的對

    2024年02月09日
    瀏覽(19)
  • 黑馬程序員-職工管理系統(tǒng)實戰(zhàn)-附加源碼Git

    黑馬程序員-職工管理系統(tǒng)實戰(zhàn)-附加源碼Git

    職工管理系統(tǒng)可以用來管理公司內(nèi)所有員工的信息 本教程主要利用C++來實現(xiàn)一個基于多態(tài)的職工管理系統(tǒng) 公司中職工分為三類:普通員工、經(jīng)理、老板,顯示信息時,需要顯示職工編號、職工姓名、職工崗位、以及職責(zé) 普通員工職責(zé):完成經(jīng)理交給的任務(wù) 經(jīng)理職責(zé):完成老

    2024年02月03日
    瀏覽(31)
  • 第01篇:系統(tǒng)化學(xué)習(xí), 搞定Spring容器管理

    第01篇:系統(tǒng)化學(xué)習(xí), 搞定Spring容器管理

    公眾號 : 西魏陶淵明 CSDN : https://springlearn.blog.csdn.net 天下代碼一大抄, 抄來抄去有提高, 看你會抄不會抄! Spring 是 java 開發(fā)者,永遠(yuǎn)繞不開的結(jié)。 Spring 是非常值得開發(fā)者來學(xué)習(xí)的, 以目前 Spring 在 java 領(lǐng)域的統(tǒng)治性地位, 可以說學(xué) java 就是在學(xué) Spring 。但是作為新入門的開發(fā)人

    2023年04月15日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包