Тема: ООП Класи й об'єкти в С++

Завдання ООП
1.Визначити клас користувача відповідно до варіанта завдання (в мене клас "Студент" в якому є Ім'я, Курс, Стать).
2.Визначити в класі наступні конструктори: без параметрів, з параметрами,
копіювання.
3.Визначити в класі деструктор.
4.Визначити в класі компонента-функції для перегляду і встановлення
полів даних.
5.Визначити покажчик на компонент-функцію.
6.Визначити покажчик на екземпляр класу.
7.Написати демонстраційну програму, в якій створюються і руйнуються об'єкти класу користувача і кожен виклик конструктора і деструктора супроводжується видачею відповідного повідомлення (який об'єкт, який конструктор чи деструктор викликав).

#include <iostream>
#include <conio.h>

using namespace std;

struct student
{
private:
    char* name;//Імя
    int level;//Курс
    bool sex;//Стать(1 - чоловіча)

public:
    student()
    {
        name = "NULL";
        level = 0;
        sex = false;
        cout << "Konstruktor bez parametriv\nname = " << name << " level = " << level << " sex = ";
        sex ? cout << "Cholovik" << endl : cout << "Zhinka" << endl;
    }
    student(char* name = "NULL", int level = 0, bool sex = false)
    {
        cout << "Konstruktor z parametramy\nname = " << name << " level = " << level << " sex = ";
        sex ? cout << "Cholovik" << endl : cout << "Zhinka" << endl;
    }
    student(const student &obj)//конструктор копіювання
    {
        cout << "Konstruktor kopiyuvannya" << endl;
    }
    ///////////////////////////////////////////////////////////////////////
    ~student()//Деструктор
    {
        cout << "destructor" << endl;
    }
    ////////////////////////////////////////////////////////////////////////
    void EnterData(char* str, int num, bool var)
    {
        name = str;
        level = num;
        sex = var;
    }
    void PrintData()
    {
        cout << "name = " << name << " level = " << level << " sex = ";
        sex ? cout << "Cholovik" << endl : cout << "Zhinka" << endl;
    }
};

int main()
{
    student Student1("Alexsander",2,true);//Конструктор з параметрами

    student Student2;
    Student2.EnterData("Vadim", 2, true);
    Student2.PrintData();

    getch();
    return 0;
}

Допоможіть вирішити проблеми
4) Помилка: класс "student" содержит более одного конструктора по умолчанию
Як зробить 5,6 завдання ?
7)В мене не працює деструктор

2

Re: ООП Класи й об'єкти в С++

У вас більше одного конструктора по замовчуванню бо конструкторі

student(char* name = "NULL", int level = 0, bool sex = false)

всі параметри мають значення по замовчуванню і цей конструктор може викликатись без параметрів взагалі, так само як і конструктор

student()
life is too short to remove usb safely
Подякували: Betterthanyou, koala2

3

Re: ООП Класи й об'єкти в С++

Arete написав:

У вас більше одного конструктора по замовчуванню бо конструкторі

student(char* name = "NULL", int level = 0, bool sex = false)

всі параметри мають значення по замовчуванню і цей конструктор може викликатись без параметрів взагалі, так само як і конструктор

student()

Дякую, тепер працює.

    student(char* name, int level, bool sex)
    {
        cout << "Konstruktor z parametramy\nname = " << name << " level = " << level << " sex = ";
        sex ? cout << "Cholovik" << endl : cout << "Zhinka" << endl;
    }

А як зробити покажчики
5.Визначити покажчик на компонент-функцію.
6.Визначити покажчик на екземпляр класу.

4 Востаннє редагувалося Arete (08.04.2015 22:43:01)

Re: ООП Класи й об'єкти в С++

    student(char* name, int level, bool sex)
    {
        cout << "Konstruktor z parametramy\nname = " << name << " level = " << level << " sex = ";
        sex ? cout << "Cholovik" << endl : cout << "Zhinka" << endl;
    }

До речі, звертаю увагу що в цьому конструкторі членам класу name, level та sex нічого не присвоюється. Бо тут name, level та sex є формальними параметрами, а не членами класу.

З.І.
5.Визначити покажчик на компонент-функцію.

void (student::*fptr) () = &student::PrintData;

6.Визначити покажчик на екземпляр класу.

student s;
student *ps = &s;
life is too short to remove usb safely
Подякували: Betterthanyou1