1

Тема: Є завдання створити похідний клас

Але виникають 4 помилки:

Ошибка    6    error C2511: Telephone::Telephone(char *,char *,char *,int,char *,char *,char *): перегруженная функция-член не найдена в "Telephone"    d:\fox\лабораторна робота 7\code\student.h    91    1    code
Ошибка    5    error C2533: Telephone::{ctor}: конструкторы не разрешены для возвращаемого типа    d:\fox\лабораторна робота 7\code\student.h    91    1    code
Ошибка    3    error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию    d:\fox\лабораторна робота 7\code\student.h    33    1    code
Ошибка    7    error C1004: непредвиденное обнаружение конца файла    D:\fox\Лабораторна робота 7\code\work.cpp    45    1    code

Саме завдання:

Базовий клас     Особа – прізвище, ім'я, по батькові, дата народження
Віртуальна функція      Відображення елементів класу  Show()
Похідний клас 1    Телефони стаціонарні – особа, № телефону, місто, країна

work.cpp

#include "student.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <string>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
// //////////////////////////////////////////////////////////робота з класом студент
//  створюємо три екземпляри похідного класу class Student  :  
//  екземпляр stud1 - використовуючи конструктор з параметрами
//  екземпляр stud4 - використовуючи конструктор копіювання,
//  і призначаємо студенту стипендію
//  екземпляр stud3 - використовуючи конструктор за умовчанням, без заповнення

  class Telephone stud1=Telephone("Fox", "Nicolia", "Nic", 1996, "575476", "Черінігів", "Україна");             // Створити екземпляр класу
//  виводимо вміст членів класу
  cout <<  "Ім'я - " <<  stud1.getName() << " Призвіще - "     << stud1.getSName()     << endl; 
  cout <<  "Номер -  " <<  stud1.getNomer_telephone()  << " Місто -  " <<  stud1.getTown() << endl; 
//////
  stud1.Show();    // роздрукувати стать, ФІБ, вік студента – наслідуваний метод class Person

  class Telephone stud4=stud1;        // скопіювати вміст екземпляру класу в новий екземпляр
  cout  << endl  << "Ekzemplyar new class: " << endl; 
  stud4.Show();            // роздрукувати стать, ФІБ, вік студента
  stud4.setTown("Київ");        // установити звичайну стипендію
//  виводимо вміст членів класу
  cout <<  "Ім'я - " <<  stud1.getName() << " Призвіще - "     << stud1.getSName()     << endl; 
  cout <<  "Номер -  " <<  stud1.getNomer_telephone()  << " Місто -  " <<  stud1.getTown() << endl;  
//////
  stud4.Show();

  class Telephone stud3=Telephone( );       // Створити екземпляр класу
  cout  << endl << "Instance of the class - garbage" << endl; 
  stud3.Show();    

  system("PAUSE");
  return 0;
}

student.h

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <string>
#include <iostream>
#include <fstream>

using namespace std;

class Person
{
public:
    string strSName;
    string strName;
    string strPatron;
    int iData;

//    Person(const Person &Person) 
//    {
    //    this -> strSName = Person.strSName;
    //    this -> strName = Person.strName;
    //    this -> strPatron = Person.strPatron;
    //    this -> iAge = Person.iAge;
    //    this -> strRate = Person.strRate;
//  };

    Person() {};

    Person(char *chSName, char *cName, char *chPatron, int iData=0);

    Telephone(const Person &Person)
    {
        setSName( (char*)Person.strSName.c_str() ); 
        setName( (char*)Person.strName.c_str() );
         setPatron( (char*)Person.strPatron.c_str() );
         setData( Person.iData ); 
    };    
    virtual ~Person() { };    
//  змінити елементи екземпляру класу                            
    void setSName(char *chSName)        {this->strSName=chSName;}
    void setName(char *chName)            {this->strName=chName;}
    void setPatron(char *chPatron)        {this->strPatron=chPatron;}
    void setData(int iData)                {this->iData = iData;}
//  отримати елементи екземпляру класу
    string getSName()        const {return strSName;}
    string getName()        const {return strName;}
    string getPatron()            const {return strPatron;}
    int getData()             const {return iData;}
};

class Telephone: public Person
{
    string iNomer_telephone;
    string strTown;
    string strCountry;

public:
    Telephone() {};

    Telephone(char *chSName, char *chName, char *chPatron, int iData=0, 
        string iNomer_telephone = 0, string strTown = 0, string strCountry = 0);

    Telephone(const Telephone &Telephone) : Person()
    {
        setNomer_telephone( (char*)Telephone.iNomer_telephone ); 
        setTown( (char*)Telephone.strTown.c_str() );
        setCountry( (char*)Telephone.strCountry.c_str() );
    };    
    virtual ~Telephone() { };    
//  змінити елементи екземпляру класу                            
    void setNomer_telephone(int iNomer_telephone)    {this->iNomer_telephone=iNomer_telephone;}
    void setTown(char *chTown)            {this->strTown=chTown;}
    void setCountry(char *chCountry)    {this->strCountry=chCountry;}
//  отримати елементи екземпляру класу
    string getNomer_telephone() const {return iNomer_telephone;}
    string getTown()            const {return strTown;}
    string getCountry()          const {return strCountry;}

// Друк інформацію про студента 
    void  Show()
    {
        cout << getSName() << " " << getName() << " " << getPatron() << " " << getNomer_telephone() << " " << getTown();
        cout << getCountry() << " " << endl;
    }
}

//                 Опис методів похідного  класу
// Конструктор опис, змінні  char - не пусті значення, інші або  = 0, або всі задані     
    Telephone::Telephone(char *chSName, char *chName, char *chPatron, int iData=0, 
        char *iNomer_telephone, char *strTown, char *strCountry)  :  Person(chSName, chName, chPatron)  
 // типи змінних співпадають з типами у базовому класі
    {
        setNomer_telephone(iNomer_telephone);
        setTown(chTown);
        setCountry(chCountry);
        setSName(chSName);
        setName(chName);
        setPatron(chPatron);
    }

2

Re: Є завдання створити похідний клас

nicoliafox
Про помилку 6
В тебе конструктор Telephone::Telephone(char *chSName, char *chName... визначений ЗА межами класу, тому клас не знає що це за метод. Перенеси його в тіло класу, за дужку в стрічці №86, або напиши оголошення конструктора в тілі класу.

Подякували: leofun011

3

Re: Є завдання створити похідний клас

Уточню: в тілі класа описане одне проголошення конструктора

    Telephone(char *chSName, char *chName, char *chPatron, int iData=0, 
        string iNomer_telephone = 0, string strTown = 0, string strCountry = 0);

а за тілом - інше:

    Telephone::Telephone(char *chSName, char *chName, char *chPatron, int iData=0, 
        char *iNomer_telephone, char *strTown, char *strCountry)  :  Person(chSName, chName, chPatron)  

Компілятор, відповідно, вважає, що це різні конструктори. Ну і зовсім не зрозуміло, нащо змішувати string і char*.

Подякували: leofun012

4

Re: Є завдання створити похідний клас

Взагалі дивно, гадав, що параметр із значенням по замовченню не може мати після себе параметри без значень по замовченню.

5

Re: Є завдання створити похідний клас

Yola написав:

Взагалі дивно, гадав, що параметр із значенням по замовченню не може мати після себе параметри без значень по замовченню.

Не може, але автор про це ще не спитав. Дамо йому шанс самостійно виправити наступні проблеми.