C++ Лабораторные

Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Ну вот первое задание
C:
#include "Header.h"
int main() {
    Book A;
    Book B("Book autor","Book name", "Book publisher", 2020, 355);
    A.getInformation();
    B.getInformation();
    cout << endl << endl << endl;
    //operator overloading
    cout << A << B;
    return 0;
}
C++:
#ifndef HEADER_H_
#define HEADER_H_
#include <iostream>
using std::cout; using std::cin; using std::endl; using std::string; using std::ostream;

class Book {
private:
    string mAuthor;
    string mName;
    string mPublisher;
    int mYear;
    int mPages;
public:
    Book();
    Book(const string &author, const string &name, const string &publisher, const int &year, const int &pages);
    bool setAuthor(const string &author);
    bool setName(const string &name);
    bool setPublisher(const string &publisher);
    bool setYear(const int &year);
    bool setPages(const int &pages);
    string &getAutor();
    string &getName();
    void getInformation();
    //operator overloading
    friend ostream& operator<< (ostream &out, const Book &b);
};

#endif // HEADER_H_
C++:
#include "Header.h"

Book::Book() {
    setAuthor("undefinedAutor");
    setName("undefinedName");
    setPublisher("undefinedPublisher");
    setYear(2000);
    setPages(0);
}
Book::Book(const string &author, const string &name, const string &publisher, const int &year, const int &pages) {
    setAuthor(author);
    setName(name);
    setPublisher(publisher);
    setYear(year);
    setPages(pages);
}

bool Book::setAuthor(const string &author) {
    mAuthor = author;
    return true;
}
bool Book::setName(const string &name) {
    mName = name;
    return true;
}
bool Book::setPublisher(const string &publisher) {
    mPublisher = publisher;
    return true;
}
bool Book::setYear(const int &year) {
    mYear = year;
    return true;
}
bool Book::setPages(const int &pages) {
    mPages = pages;
    return true;
}

string &Book::getAutor() {
    return mAuthor;
}
string &Book::getName() {
    return mName;
}

void Book::getInformation() {
    cout << "Book information: " << endl << "\tAutor - " << getAutor()  << "." << endl << "\tName - " << getName() << "." << endl;
    return;
}

//operator overloading
ostream& operator<< (ostream &out, const Book &b) {
    out << "Book information: " << endl << "\tAutor - " << b.mAuthor  << "." << endl << "\tName - " << b.mName << "." << endl;
    return out;
}
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Ну вот первое задание
Опять маленькие придирки x)
Короткие методы (например простые геттеры и сеттеры) проще писать сразу при объявлении, несмотря на то что сейчас есть межобъектная оптимизация например в студии, метод может остаться в отдельной функции, вызов которой будет дороже чем обычный инлайн.
Так же в качестве защиты дабл инклуда проще использовать #pragma once.
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Ну вот первое задание
C:
#include "Header.h"
int main() {
    Book A;
    Book B("Book autor","Book name", "Book publisher", 2020, 355);
    A.getInformation();
    B.getInformation();
    cout << endl << endl << endl;
    //operator overloading
    cout << A << B;
    return 0;
}
C++:
#ifndef HEADER_H_
#define HEADER_H_
#include <iostream>
using std::cout; using std::cin; using std::endl; using std::string; using std::ostream;

class Book {
private:
    string mAuthor;
    string mName;
    string mPublisher;
    int mYear;
    int mPages;
public:
    Book();
    Book(const string &author, const string &name, const string &publisher, const int &year, const int &pages);
    bool setAuthor(const string &author);
    bool setName(const string &name);
    bool setPublisher(const string &publisher);
    bool setYear(const int &year);
    bool setPages(const int &pages);
    string &getAutor();
    string &getName();
    void getInformation();
    //operator overloading
    friend ostream& operator<< (ostream &out, const Book &b);
};

#endif // HEADER_H_
C++:
#include "Header.h"

Book::Book() {
    setAuthor("undefinedAutor");
    setName("undefinedName");
    setPublisher("undefinedPublisher");
    setYear(2000);
    setPages(0);
}
Book::Book(const string &author, const string &name, const string &publisher, const int &year, const int &pages) {
    setAuthor(author);
    setName(name);
    setPublisher(publisher);
    setYear(year);
    setPages(pages);
}

bool Book::setAuthor(const string &author) {
    mAuthor = author;
    return true;
}
bool Book::setName(const string &name) {
    mName = name;
    return true;
}
bool Book::setPublisher(const string &publisher) {
    mPublisher = publisher;
    return true;
}
bool Book::setYear(const int &year) {
    mYear = year;
    return true;
}
bool Book::setPages(const int &pages) {
    mPages = pages;
    return true;
}

string &Book::getAutor() {
    return mAuthor;
}
string &Book::getName() {
    return mName;
}

void Book::getInformation() {
    cout << "Book information: " << endl << "\tAutor - " << getAutor()  << "." << endl << "\tName - " << getName() << "." << endl;
    return;
}

//operator overloading
ostream& operator<< (ostream &out, const Book &b) {
    out << "Book information: " << endl << "\tAutor - " << b.mAuthor  << "." << endl << "\tName - " << b.mName << "." << endl;
    return out;
}
Только смог зайти на форум, можешь ещё остальные сделать плиз?)
 
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Опять маленькие придирки x)
Короткие методы (например простые геттеры и сеттеры) проще писать сразу при объявлении, несмотря на то что сейчас есть межобъектная оптимизация например в студии, метод может остаться в отдельной функции, вызов которой будет дороже чем обычный инлайн.
Так же в качестве защиты дабл инклуда проще использовать #pragma once.
Использую принцип разделять и властвовать. Но я понял лучше простые геттеры и сеттеры писать можно было в объявлении. Наверное функции надо было предварить словом inline. Про header guard, я использую Code Blocks он сам подставляет. Вообще для закрепления нужно немного ручной работы так сказать.
Только смог зайти на форум, можешь ещё остальные сделать плиз?)
Не особо дееспособен сегодня но я попробую.
 
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Вот второе
C++:
#include "Header.h"
int main() {
    worker one;
    one.getInformation();

    worker two({"Sinclair",'M','V'},POST::TECHNICAL_STAFF,2000, 10000);
    two.getInformation();

    return EXIT_SUCCESS;
}
C++:
#pragma once
#include <iostream>
#include <cstdlib>
using std::cout; using std::cin; using std::endl; using std::string; using std::ostream; using std::istream;
enum class POST {
    UNCNOWN,
    DIRECTOR,
    ACADEMIC,
    MID_RANGE_MANAGER,
    TECHNICAL_STAFF,
    LAWYER,
};

struct initials {
    string m_Surname;
    char m_Name;
    char m_Patronomus;
};

class worker {
private:
    initials m_FullName;
    POST m_Position;
    unsigned int m_Joining;
    unsigned int m_Salary;
public:
    worker();
    worker(const initials &fullname, const POST&, const unsigned int&, const unsigned int&);
    inline bool SetFullName(const initials &fullname);
    inline bool SetPost(const POST &position);
    inline bool setJoin(const unsigned int &joining);
    inline bool setSalary(const unsigned int &salary);
    inline const initials &getFullname() const;
    inline const unsigned int &getSalary() const;
    const bool getInformation() const;
    //friend istream& operator>> (istream &in, worker &w);
    //friend ostream& operator<< (ostream &out, const worker &w);
};
C++:
#include "Header.h"


worker::worker() {
    SetFullName({"No data available",'_','_'});
    SetPost(POST::UNCNOWN);
    setJoin(0);
    setSalary(0);
}
worker::worker(const initials &fullname, const POST &position, const unsigned int &joining, const unsigned int &salary) {
    SetFullName(fullname);
    SetPost(position);
    setJoin(joining);
    setSalary(salary);
}

inline bool worker::SetFullName(const initials &fullname) {
    m_FullName = fullname;
    return true;
}
inline bool worker::SetPost(const POST &position) {
    m_Position = position;
    return true;
}
inline bool worker::setJoin(const unsigned int &joining) {
    m_Joining = joining;
    return true;
}
inline bool worker::setSalary(const unsigned int &salary) {
    m_Salary = salary;
    return true;
}

inline const initials &worker::getFullname() const {
    return m_FullName;
}
inline const unsigned int &worker::getSalary() const {
    return m_Salary;
}
const bool worker::getInformation() const {
    cout << "\t\tInformation" << endl << "Initials:" << endl << '\t' << m_FullName.m_Surname << ' ' << m_FullName.m_Name << "." << m_FullName.m_Patronomus << '.'<< endl;
    cout << "\tSalary: ";
    if(getSalary()== 0) {
        cout << "No data available" << "$." << endl;
    } else if (getSalary()){
        cout << getSalary() << "$." << endl;
    }
    cout << "--------------------------------------------------" << endl;
    return true;
}
Перегрузка операторов вроде тебе не нужна, и к тому же это долговато реализовывать. Со здоровьем сегодня не впорядке, как смог сделал.
Если ты собираешься вызвать конструктор с аргументами, нужно передавать структуру первым аргументом.
 
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Так второе дыхание. Доделал перегрузку операторов.
C++:
#include "Header.h"
int main() {
    worker one;
    one.getInformation();

    worker two({"Sinclair",'M','V'},POST::TECHNICAL_STAFF,2000, 10000);
    two.getInformation();

    worker three;
    cin >> three;
    cout << three;
    return EXIT_SUCCESS;
}
C++:
#pragma once
#include <iostream>
#include <cstdlib>
using std::cout; using std::cin; using std::endl; using std::string; using std::ostream; using std::istream;
using unsint = unsigned int;
enum class POST {
    UNCNOWN,
    DIRECTOR,
    ACADEMIC,
    MID_RANGE_MANAGER,
    TECHNICAL_STAFF,
    LAWYER,
};

struct initials {
    string m_Surname;
    char m_Name;
    char m_Patronomus;
};

class worker {
private:
    initials m_FullName;
    POST m_Position;
    unsint m_Joining;
    unsint m_Salary;
public:
    worker();
    worker(const initials &fullname, const POST&, const unsint&, const unsint&);
    inline bool SetFullName(const initials &fullname);
    inline bool SetPost(const POST &position);
    inline bool setJoin(const unsigned int &joining);
    inline bool setSalary(const unsigned int &salary);
    inline const initials &getFullname() const;
    inline const unsint &getSalary() const;
    const bool getInformation() const;
    friend istream& operator>> (istream &in, worker &w);
    friend ostream& operator<< (ostream &out, const worker &w);
};
C++:
#include "Header.h"
constexpr unsigned int sizeArray = 6;
string Posts[sizeArray] = {
    "UNCNOWN",
    "DIRECTOR",
    "ACADEMIC",
    "MID_RANGE_MANAGER",
    "TECHNICAL_STAFF",
    "LAWYER"
};

worker::worker() {
    SetFullName({"No data available",'_','_'});
    SetPost(POST::UNCNOWN);
    setJoin(0);
    setSalary(0);
}
worker::worker(const initials &fullname, const POST &position, const unsint &joining, const unsint &salary) {
    SetFullName(fullname);
    SetPost(position);
    setJoin(joining);
    setSalary(salary);
}

inline bool worker::SetFullName(const initials &fullname) {
    m_FullName = fullname;
    return true;
}
inline bool worker::SetPost(const POST &position) {
    m_Position = position;
    return true;
}
inline bool worker::setJoin(const unsigned int &joining) {
    m_Joining = joining;
    return true;
}
inline bool worker::setSalary(const unsigned int &salary) {
    m_Salary = salary;
    return true;
}

inline const initials &worker::getFullname() const {
    return m_FullName;
}
inline const unsint &worker::getSalary() const {
    return m_Salary;
}
const bool worker::getInformation() const {
    cout << "\t\tInformation" << endl << "Initials:" << endl << '\t' << m_FullName.m_Surname << ' ' << m_FullName.m_Name << "." << m_FullName.m_Patronomus << '.'<< endl;
    cout << "\tSalary: ";
    if(getSalary()== 0) {
        cout << "No data available" << endl;
    } else if (getSalary()){
        cout << getSalary() << "$." << endl;
    }
    cout << "--------------------------------------------------" << endl;
    return true;
}

istream& operator>> (istream &in, worker &w) {
    cout << "\t\tSet data" << endl;
    cout << "Enter initials: " << endl;
    while (true) {
        cout << "\tSurname: ";
        cin >> w.m_FullName.m_Surname;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Surname again: " << endl;
            continue;
        }
        cin.ignore(32767, '\n');
        break;
    }
    while (true) {
        cout << "\tName: ";
        cin >> w.m_FullName.m_Name;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Name again: " << endl;
            continue;
        }
        cin.ignore(32767, '\n');
        break;
    }
    while (true) {
        cout << "\tPatronomus: ";
        cin >> w.m_FullName.m_Patronomus;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Patronomus again: " << endl;
            continue;
        }
        cin.ignore(32767, '\n');
        break;
    }

    cout << "Set post: " << endl;
    for(unsigned int num = 0; num < sizeArray; num++) {
        cout << num << ") " << Posts[num] << endl;
    }
    unsigned int choice;
    while (true) {
        cin >> choice;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Choice again: " << endl;
            continue;
        }
        if (choice > 5) {
            cout << "Incorrect Choice again: " << endl;
            continue;
        }
        break;
    }
    switch(choice) {
        case 0: w.m_Position = POST::UNCNOWN;
        break;
        case 1: w.m_Position = POST::DIRECTOR;
        break;
        case 2: w.m_Position = POST::ACADEMIC;
        break;
        case 3: w.m_Position = POST::MID_RANGE_MANAGER;
        break;
        case 4: w.m_Position = POST::TECHNICAL_STAFF;
        break;
        case 5: w.m_Position = POST::LAWYER;
        break;
        default:
            w.m_Position = POST::UNCNOWN;
    }

    cout << "Enter joining: " << endl;
    while (true) {
        cin >> w.m_Joining;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Choice again: " << endl;
            continue;
        }
        break;
    }

    cout << "Enter salary: " << endl;
    while (true) {
        cin >> w.m_Salary;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Choice again: " << endl;
            continue;
        }
        break;
    }

    cout << "--------------------------------------------------" << endl;
    return in;
}

ostream& operator<< (ostream &out, const worker &w) {
    cout << "\t\tInformation" << endl << "Initials:" << endl << '\t' << w.m_FullName.m_Surname << ' ' << w.m_FullName.m_Name << "." << w.m_FullName.m_Patronomus << '.'<< endl;
    cout << "\tSalary: ";
    if(w.getSalary()== 0) {
        cout << "No data available" << endl;
    } else if (w.getSalary()){
        cout << w.getSalary() << "$." << endl;
    }
    cout << "--------------------------------------------------" << endl;
    return out;
}
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Вот второе
C++:
#include "Header.h"
int main() {
    worker one;
    one.getInformation();

    worker two({"Sinclair",'M','V'},POST::TECHNICAL_STAFF,2000, 10000);
    two.getInformation();

    return EXIT_SUCCESS;
}
C++:
#pragma once
#include <iostream>
#include <cstdlib>
using std::cout; using std::cin; using std::endl; using std::string; using std::ostream; using std::istream;
enum class POST {
    UNCNOWN,
    DIRECTOR,
    ACADEMIC,
    MID_RANGE_MANAGER,
    TECHNICAL_STAFF,
    LAWYER,
};

struct initials {
    string m_Surname;
    char m_Name;
    char m_Patronomus;
};

class worker {
private:
    initials m_FullName;
    POST m_Position;
    unsigned int m_Joining;
    unsigned int m_Salary;
public:
    worker();
    worker(const initials &fullname, const POST&, const unsigned int&, const unsigned int&);
    inline bool SetFullName(const initials &fullname);
    inline bool SetPost(const POST &position);
    inline bool setJoin(const unsigned int &joining);
    inline bool setSalary(const unsigned int &salary);
    inline const initials &getFullname() const;
    inline const unsigned int &getSalary() const;
    const bool getInformation() const;
    //friend istream& operator>> (istream &in, worker &w);
    //friend ostream& operator<< (ostream &out, const worker &w);
};
C++:
#include "Header.h"


worker::worker() {
    SetFullName({"No data available",'_','_'});
    SetPost(POST::UNCNOWN);
    setJoin(0);
    setSalary(0);
}
worker::worker(const initials &fullname, const POST &position, const unsigned int &joining, const unsigned int &salary) {
    SetFullName(fullname);
    SetPost(position);
    setJoin(joining);
    setSalary(salary);
}

inline bool worker::SetFullName(const initials &fullname) {
    m_FullName = fullname;
    return true;
}
inline bool worker::SetPost(const POST &position) {
    m_Position = position;
    return true;
}
inline bool worker::setJoin(const unsigned int &joining) {
    m_Joining = joining;
    return true;
}
inline bool worker::setSalary(const unsigned int &salary) {
    m_Salary = salary;
    return true;
}

inline const initials &worker::getFullname() const {
    return m_FullName;
}
inline const unsigned int &worker::getSalary() const {
    return m_Salary;
}
const bool worker::getInformation() const {
    cout << "\t\tInformation" << endl << "Initials:" << endl << '\t' << m_FullName.m_Surname << ' ' << m_FullName.m_Name << "." << m_FullName.m_Patronomus << '.'<< endl;
    cout << "\tSalary: ";
    if(getSalary()== 0) {
        cout << "No data available" << "$." << endl;
    } else if (getSalary()){
        cout << getSalary() << "$." << endl;
    }
    cout << "--------------------------------------------------" << endl;
    return true;
}
Перегрузка операторов вроде тебе не нужна, и к тому же это долговато реализовывать. Со здоровьем сегодня не впорядке, как смог сделал.
Если ты собираешься вызвать конструктор с аргументами, нужно передавать структуру первым аргументом.
В этом задании нужно что-то объявлять?
или оно уже готово?
Так второе дыхание. Доделал перегрузку операторов.
C++:
#include "Header.h"
int main() {
    worker one;
    one.getInformation();

    worker two({"Sinclair",'M','V'},POST::TECHNICAL_STAFF,2000, 10000);
    two.getInformation();

    worker three;
    cin >> three;
    cout << three;
    return EXIT_SUCCESS;
}
C++:
#pragma once
#include <iostream>
#include <cstdlib>
using std::cout; using std::cin; using std::endl; using std::string; using std::ostream; using std::istream;
using unsint = unsigned int;
enum class POST {
    UNCNOWN,
    DIRECTOR,
    ACADEMIC,
    MID_RANGE_MANAGER,
    TECHNICAL_STAFF,
    LAWYER,
};

struct initials {
    string m_Surname;
    char m_Name;
    char m_Patronomus;
};

class worker {
private:
    initials m_FullName;
    POST m_Position;
    unsint m_Joining;
    unsint m_Salary;
public:
    worker();
    worker(const initials &fullname, const POST&, const unsint&, const unsint&);
    inline bool SetFullName(const initials &fullname);
    inline bool SetPost(const POST &position);
    inline bool setJoin(const unsigned int &joining);
    inline bool setSalary(const unsigned int &salary);
    inline const initials &getFullname() const;
    inline const unsint &getSalary() const;
    const bool getInformation() const;
    friend istream& operator>> (istream &in, worker &w);
    friend ostream& operator<< (ostream &out, const worker &w);
};
C++:
#include "Header.h"
constexpr unsigned int sizeArray = 6;
string Posts[sizeArray] = {
    "UNCNOWN",
    "DIRECTOR",
    "ACADEMIC",
    "MID_RANGE_MANAGER",
    "TECHNICAL_STAFF",
    "LAWYER"
};

worker::worker() {
    SetFullName({"No data available",'_','_'});
    SetPost(POST::UNCNOWN);
    setJoin(0);
    setSalary(0);
}
worker::worker(const initials &fullname, const POST &position, const unsint &joining, const unsint &salary) {
    SetFullName(fullname);
    SetPost(position);
    setJoin(joining);
    setSalary(salary);
}

inline bool worker::SetFullName(const initials &fullname) {
    m_FullName = fullname;
    return true;
}
inline bool worker::SetPost(const POST &position) {
    m_Position = position;
    return true;
}
inline bool worker::setJoin(const unsigned int &joining) {
    m_Joining = joining;
    return true;
}
inline bool worker::setSalary(const unsigned int &salary) {
    m_Salary = salary;
    return true;
}

inline const initials &worker::getFullname() const {
    return m_FullName;
}
inline const unsint &worker::getSalary() const {
    return m_Salary;
}
const bool worker::getInformation() const {
    cout << "\t\tInformation" << endl << "Initials:" << endl << '\t' << m_FullName.m_Surname << ' ' << m_FullName.m_Name << "." << m_FullName.m_Patronomus << '.'<< endl;
    cout << "\tSalary: ";
    if(getSalary()== 0) {
        cout << "No data available" << endl;
    } else if (getSalary()){
        cout << getSalary() << "$." << endl;
    }
    cout << "--------------------------------------------------" << endl;
    return true;
}

istream& operator>> (istream &in, worker &w) {
    cout << "\t\tSet data" << endl;
    cout << "Enter initials: " << endl;
    while (true) {
        cout << "\tSurname: ";
        cin >> w.m_FullName.m_Surname;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Surname again: " << endl;
            continue;
        }
        cin.ignore(32767, '\n');
        break;
    }
    while (true) {
        cout << "\tName: ";
        cin >> w.m_FullName.m_Name;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Name again: " << endl;
            continue;
        }
        cin.ignore(32767, '\n');
        break;
    }
    while (true) {
        cout << "\tPatronomus: ";
        cin >> w.m_FullName.m_Patronomus;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Patronomus again: " << endl;
            continue;
        }
        cin.ignore(32767, '\n');
        break;
    }

    cout << "Set post: " << endl;
    for(unsigned int num = 0; num < sizeArray; num++) {
        cout << num << ") " << Posts[num] << endl;
    }
    unsigned int choice;
    while (true) {
        cin >> choice;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Choice again: " << endl;
            continue;
        }
        if (choice > 5) {
            cout << "Incorrect Choice again: " << endl;
            continue;
        }
        break;
    }
    switch(choice) {
        case 0: w.m_Position = POST::UNCNOWN;
        break;
        case 1: w.m_Position = POST::DIRECTOR;
        break;
        case 2: w.m_Position = POST::ACADEMIC;
        break;
        case 3: w.m_Position = POST::MID_RANGE_MANAGER;
        break;
        case 4: w.m_Position = POST::TECHNICAL_STAFF;
        break;
        case 5: w.m_Position = POST::LAWYER;
        break;
        default:
            w.m_Position = POST::UNCNOWN;
    }

    cout << "Enter joining: " << endl;
    while (true) {
        cin >> w.m_Joining;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Choice again: " << endl;
            continue;
        }
        break;
    }

    cout << "Enter salary: " << endl;
    while (true) {
        cin >> w.m_Salary;
        if(cin.fail()) {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "Incorrect Choice again: " << endl;
            continue;
        }
        break;
    }

    cout << "--------------------------------------------------" << endl;
    return in;
}

ostream& operator<< (ostream &out, const worker &w) {
    cout << "\t\tInformation" << endl << "Initials:" << endl << '\t' << w.m_FullName.m_Surname << ' ' << w.m_FullName.m_Name << "." << w.m_FullName.m_Patronomus << '.'<< endl;
    cout << "\tSalary: ";
    if(w.getSalary()== 0) {
        cout << "No data available" << endl;
    } else if (w.getSalary()){
        cout << w.getSalary() << "$." << endl;
    }
    cout << "--------------------------------------------------" << endl;
    return out;
}
Это третяя лаба я так понял?
Ну вот первое задание
C:
#include "Header.h"
int main() {
    Book A;
    Book B("Book autor","Book name", "Book publisher", 2020, 355);
    A.getInformation();
    B.getInformation();
    cout << endl << endl << endl;
    //operator overloading
    cout << A << B;
    return 0;
}
C++:
#ifndef HEADER_H_
#define HEADER_H_
#include <iostream>
using std::cout; using std::cin; using std::endl; using std::string; using std::ostream;

class Book {
private:
    string mAuthor;
    string mName;
    string mPublisher;
    int mYear;
    int mPages;
public:
    Book();
    Book(const string &author, const string &name, const string &publisher, const int &year, const int &pages);
    bool setAuthor(const string &author);
    bool setName(const string &name);
    bool setPublisher(const string &publisher);
    bool setYear(const int &year);
    bool setPages(const int &pages);
    string &getAutor();
    string &getName();
    void getInformation();
    //operator overloading
    friend ostream& operator<< (ostream &out, const Book &b);
};

#endif // HEADER_H_
C++:
#include "Header.h"

Book::Book() {
    setAuthor("undefinedAutor");
    setName("undefinedName");
    setPublisher("undefinedPublisher");
    setYear(2000);
    setPages(0);
}
Book::Book(const string &author, const string &name, const string &publisher, const int &year, const int &pages) {
    setAuthor(author);
    setName(name);
    setPublisher(publisher);
    setYear(year);
    setPages(pages);
}

bool Book::setAuthor(const string &author) {
    mAuthor = author;
    return true;
}
bool Book::setName(const string &name) {
    mName = name;
    return true;
}
bool Book::setPublisher(const string &publisher) {
    mPublisher = publisher;
    return true;
}
bool Book::setYear(const int &year) {
    mYear = year;
    return true;
}
bool Book::setPages(const int &pages) {
    mPages = pages;
    return true;
}

string &Book::getAutor() {
    return mAuthor;
}
string &Book::getName() {
    return mName;
}

void Book::getInformation() {
    cout << "Book information: " << endl << "\tAutor - " << getAutor()  << "." << endl << "\tName - " << getName() << "." << endl;
    return;
}

//operator overloading
ostream& operator<< (ostream &out, const Book &b) {
    out << "Book information: " << endl << "\tAutor - " << b.mAuthor  << "." << endl << "\tName - " << b.mName << "." << endl;
    return out;
}
Можешь пожалуйста сделать в этом задании что бы человек вписывать мог имя автора и т.д.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Вот второе
C++:
#include "Header.h"
int main() {
    worker one;
    one.getInformation();

    worker two({"Sinclair",'M','V'},POST::TECHNICAL_STAFF,2000, 10000);
    two.getInformation();

    return EXIT_SUCCESS;
}
C++:
#pragma once
#include <iostream>
#include <cstdlib>
using std::cout; using std::cin; using std::endl; using std::string; using std::ostream; using std::istream;
enum class POST {
    UNCNOWN,
    DIRECTOR,
    ACADEMIC,
    MID_RANGE_MANAGER,
    TECHNICAL_STAFF,
    LAWYER,
};

struct initials {
    string m_Surname;
    char m_Name;
    char m_Patronomus;
};

class worker {
private:
    initials m_FullName;
    POST m_Position;
    unsigned int m_Joining;
    unsigned int m_Salary;
public:
    worker();
    worker(const initials &fullname, const POST&, const unsigned int&, const unsigned int&);
    inline bool SetFullName(const initials &fullname);
    inline bool SetPost(const POST &position);
    inline bool setJoin(const unsigned int &joining);
    inline bool setSalary(const unsigned int &salary);
    inline const initials &getFullname() const;
    inline const unsigned int &getSalary() const;
    const bool getInformation() const;
    //friend istream& operator>> (istream &in, worker &w);
    //friend ostream& operator<< (ostream &out, const worker &w);
};
C++:
#include "Header.h"


worker::worker() {
    SetFullName({"No data available",'_','_'});
    SetPost(POST::UNCNOWN);
    setJoin(0);
    setSalary(0);
}
worker::worker(const initials &fullname, const POST &position, const unsigned int &joining, const unsigned int &salary) {
    SetFullName(fullname);
    SetPost(position);
    setJoin(joining);
    setSalary(salary);
}

inline bool worker::SetFullName(const initials &fullname) {
    m_FullName = fullname;
    return true;
}
inline bool worker::SetPost(const POST &position) {
    m_Position = position;
    return true;
}
inline bool worker::setJoin(const unsigned int &joining) {
    m_Joining = joining;
    return true;
}
inline bool worker::setSalary(const unsigned int &salary) {
    m_Salary = salary;
    return true;
}

inline const initials &worker::getFullname() const {
    return m_FullName;
}
inline const unsigned int &worker::getSalary() const {
    return m_Salary;
}
const bool worker::getInformation() const {
    cout << "\t\tInformation" << endl << "Initials:" << endl << '\t' << m_FullName.m_Surname << ' ' << m_FullName.m_Name << "." << m_FullName.m_Patronomus << '.'<< endl;
    cout << "\tSalary: ";
    if(getSalary()== 0) {
        cout << "No data available" << "$." << endl;
    } else if (getSalary()){
        cout << getSalary() << "$." << endl;
    }
    cout << "--------------------------------------------------" << endl;
    return true;
}
Перегрузка операторов вроде тебе не нужна, и к тому же это долговато реализовывать. Со здоровьем сегодня не впорядке, как смог сделал.
Если ты собираешься вызвать конструктор с аргументами, нужно передавать структуру первым аргументом.
а и шо тут закомментировано ?)
Подскажи пожалуйста
И можешь сделать что бы человек вписывать мог значения и т.д.?
у нас в каждом задании такое просят сделать
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Ребята, помогите пожалуйста, новая лабораторная)

Для класса Abiturient создать конструктор, который будет предлагать ввести количество оценок, создавать динамический массив с помощью ключевого слова new. Далее будет предлагать ввести все оценки последовательно. И будет записывать их в массив.
Также конструктор имеет посчитать среднее арифметическое.
В деструкторе позаботьтесь об очищении динамического массива с помощью ключевого слова delete.
Далее необходимо создать конструктор копирования, который проверит было выделение памяти и или адрес записан в указателе. При наличии адреса, конструктор копирования выделит новый участок для массива в объекте которому копируются данные.
Для проверки создайте функцию которая принимает параметр типа Abiturient и выводит в консоль имя, фамилия, отчество абитуриента и средний балл.
Также конструкторы и деструкторы пусть выводят адреса объектов создаваемых и уничтожаются, а также адреса массивов.
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Выше скидывали Abiturient.h и Abiturient.cpp для Этого задания
Ладно вот третий вариант первой лабы
C++:
#include <iostream>
#include "Header.h"
using namespace std;
int main() {
    Abiturient b;
    Abiturient a("KROSSSAW(name)", "KROSSSAW(surname)","KROSSSAW(patronomus)" ,"KROSSSAW(address)");
    return 0;
}
C++:
#ifndef HEADER_H_
#define HEADER_H_
using namespace std;
class Abiturient{
private:
    string name;
    string surname;
    string patronomyc;
    string address;
    int Array[5];
public:
    Abiturient();
    Abiturient(string a_name, string a_surname, string a_patronomus, string a_adress);
    string GetName();
    string GetSurname();
    string GetPatronomyc();
    string GetAddress();
    int GetArray();

    void SetName(string value);
    void SetSurname(string value);
    void SetPatronomyc(string value);
    void SetAddress(string value);
    void SetArray(int value[5]);

   void DeanonStudent();
};
#endif // HEADER_H_
C++:
#include <iostream>
#include "Header.h"
Abiturient::Abiturient() {
    cout << "Hello, unnamed Abiturient!\n";
    cout << "Please Enter name, surname, patronomus, address: ";
    cin >> name >> surname >> patronomyc >> address;
    GetArray();
}
Abiturient::Abiturient(string a_name, string a_surname, string a_patronomus, string a_adress) :
    name(a_name), surname(a_surname), patronomyc(a_patronomus), address(a_adress) {
     cout << "Hello " << name << " Abiturient!\n";
     GetArray();
}
string Abiturient::GetName() { return name; }
string Abiturient::GetSurname() { return surname; }
string Abiturient::GetPatronomyc() { return patronomyc; }
string Abiturient::GetAddress() { return address; }
int Abiturient::GetArray() {
    cout << "Enter grade five value: ";
    for (int var = 0; var < 5; var++) {
        cin >> Array[var];
    }
    int counter = 0;
    for (int var = 0; var < 5; var++) {
        if (Array[var] < 3){
            counter++;
        }
    }
    if (counter > 2) {
        cout << "exclude from the sharaga\a\a\n";
    } else {
        cout << "Normal\n";
    }
    return Array[5];
}
void Abiturient::SetName(string value) { name = value; }
void Abiturient::SetSurname(string value) { surname = value; }
void Abiturient::SetPatronomyc(string value) { patronomyc = value; }
void Abiturient::SetAddress(string value) { address = value; }
void Abiturient::SetArray(int value[5]) { Array[5] = value[5]; }
Вроде работает правильно проверь. Если и это не подходить то нужен независимый эксперт.
Вот Она
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Ребята, помогите пожалуйста, новая лабораторная)

Для класса Abiturient создать конструктор, который будет предлагать ввести количество оценок, создавать динамический массив с помощью ключевого слова new. Далее будет предлагать ввести все оценки последовательно. И будет записывать их в массив.
Также конструктор имеет посчитать среднее арифметическое.
В деструкторе позаботьтесь об очищении динамического массива с помощью ключевого слова delete.
Далее необходимо создать конструктор копирования, который проверит было выделение памяти и или адрес записан в указателе. При наличии адреса, конструктор копирования выделит новый участок для массива в объекте которому копируются данные.
Для проверки создайте функцию которая принимает параметр типа Abiturient и выводит в консоль имя, фамилия, отчество абитуриента и средний балл.
Также конструкторы и деструкторы пусть выводят адреса объектов создаваемых и уничтожаются, а также адреса массивов.
Уважаемый, не кажется ли Вам, что решение простейших лабораторных работ через помощь со стороны - далеко не лучшая идея. Остальные предметы Вы так же учите? В таком случае встает вопрос о необходимости получения выбранного образования.
 
Сверху Снизу