Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Kлассы 
:(
    Опции темы
Павлуха
Дата 1.10.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



помогите пжалста вот простенькая программка, но выводит какую-то лабуду smile  что здесь не так??????
Код

#include <iostream.h>
#include <string.h>
class book
{    
    char avtor[20];
    char name[20];
public:
    
void set(char* a, char* n){strcpy(avtor,a); strcpy(name,n);}
    void print()
    {
        cout<<avtor<<'\n'<<name;
    }};
class book2:public book
{
    int year;
    char isd[20];
    int kol;
    int kosht;
    public:
    void set(int y, char* i, int k,int c )
    {y=year; strcpy(isd,i); k=kol; c=kosht;}
    void print()
    {
        book::print();
        cout<<year<<'\n'<<isd<<'\n'<<kol<<'\n'<<kosht;
    }};
void main()
{
book ob;
ob.set("hutin","les");
book2 obb;
obb.set(1992,"PITER",10,15000);
obb.print();
}

PM MAIL   Вверх
EvgenZ
Дата 1.10.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



strcpy(avtor,a); ноль байт не добавляешь...


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Antropoid
Дата 1.10.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Код

    void set(int y, char* i, int k,int c)
//    {y=year; strcpy(isd,i); k=kol; c=kosht;}//не так
    {year=y; strcpy(isd,i); kol=k; kosht=c;}//а так

Код

    void print()
    {
    book::print();//здесь печатается мусор, потому что поля "avtor" и "name" не инициализированы
    cout<<year<<'\n'<<isd<<'\n'<<kol<<'\n'<<kosht;
    }};

можно делать,например,так
Код

    void print()
    {
    book::set("AVTOR","NAME");
    book::print();
    cout<<year<<'\n'<<isd<<'\n'<<kol<<'\n'<<kosht;
    }};




--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Oleg_Ci
Дата 1.10.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 3
Всего: 30



Вроде всё исправил smile 
Код

#include <iostream>
#include <string.h>
using std::cout;

class book
{    
    char avtor[20];
    char name[20];
public:
    book(){ avtor[0] = 0; name[0] = 0; }
void set(char* a, char* n){strcpy(avtor,a); strcpy(name,n);}
    void print()
    {
        cout<<avtor<<'\n'<<name;
    }};
class book2:public book
{
    int year;
    char isd[20];
    int kol;
    int kosht;
public:
    book2(): year(0), kol(0), kosht(0)
    { isd[0]=0;}
    void set(int y, char* i, int k,int c )
    {year=y; strcpy(isd,i); kol=k; kosht=c;}
    void print()
    {
        book::print();
        cout<<year<<'\n'<<isd<<'\n'<<kol<<'\n'<<kosht;
    }};
void main()
{
book ob;
ob.set("hutin","les");
ob.print();
book2 obb;
obb.set(1992,"PITER",10,15000);
obb.print();
getchar();
}

PM MAIL   Вверх
Kuvaldis
Дата 1.10.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



Павлуха, 
Вообще-то какой -то странный класс book2. Зачем его делать производным от book, если ты нигде не используешь данных, определенных в базовом классе? И ни в конструкторе, ни в методе set ты не присваиваешь этим полям значение?

Лучше сделать так. В производном методе set вызывается базовый метод set для установки полей базового класса (так хоть смысл есть)
Код

//*****************************************************************************
#include <iostream>
#include <conio.h>
#include <string.h>
using std::cout;
//*****************************************************************************
class book
{
    char avtor[20];
    char name[20];
public:
    book()
    {
       avtor[0] = 0;
       name[0] = 0;
    }
    void set(char* a, char* n)
    {
       strcpy(avtor,a);
       strcpy(name,n);
    }
    void print()
    {
        cout << avtor << '\n' << name << '\n';
    }
};
//*****************************************************************************
class book2 : public book
{
    int year;
    char isd[20];
    int kol;
    int kosht;
public:
    book2(): year(0), kol(0), kosht(0) { isd[0] = 0; }
    void set(char* a, char* n, int y, char* i, int k,int c )
    {
        book::set(a, n);
        year=y; strcpy(isd,i);
        kol=k;
        kosht=c;
    }
    void print()
    {
        book::print();
        cout<<year<<'\n'<<isd<<'\n'<<kol<<'\n'<<kosht;
    }
};
//*****************************************************************************
void main()
{
    book ob;
    cout << "\n\nBook\n";
    ob.set("hutin","les");
    ob.print();
    book2 obb;
    cout << "\n\nBook2\n";
    obb.set("hutin","les", 1992,"PITER",10,15000);
    obb.print();
    getch();    
}
//*****************************************************************************



--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Xenon
Дата 1.10.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Kuvaldis, человек, скорее всего, просто упражняется в наследовании smile


--------------------
user posted image  
PM MAIL   Вверх
Павлуха
Дата 1.10.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



Цитата(Xenon @ 1.10.2006,  16:55)
Kuvaldis, человек, скорее всего, просто упражняется в наследовании smile

Именнно так smile 
СПАСИБО всем!
PM MAIL   Вверх
sergejzr
Дата 15.11.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Модератор: Название темы должно отражать ее суть!


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0600 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.