Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2009, 00:47   #61
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

а виртуальные функции на стр 628, я до неё ещё не дошёл. я только 11ю главу прочёл
Dimarik вне форума Ответить с цитированием
Старый 01.07.2009, 00:54   #62
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Я имел ввиду это сделать
Код:
#include <iostream.h>
#include "Complex1.cpp"
main()
{
int x,y;
cin >> x;
cin >> y;
Complex A(x,y);//что-то компилятору не нравится
Complex B(x,y);
Complex C;
C=A+B;
cout<<C;
cin.get();
cin.get();
return 0;
}
Чем отличается определение от объявления переменной?
profi вне форума Ответить с цитированием
Старый 01.07.2009, 01:07   #63
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

объявление переменное - например int g,h
определение: g=0;h=0

и ещё. у меня ведь A и B должны быть различными. Если я сделаю так, как ты предложил, то у меня A и B будут одинаковыми.

к тому же функция ввода прописана в конструкторе

а можно было бы так прописать
Complex A(A.a,A.b)????

Модератор: кнопка "ПРАВКА"!

Последний раз редактировалось Sazary; 01.07.2009 в 18:25.
Dimarik вне форума Ответить с цитированием
Старый 01.07.2009, 01:13   #64
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
Complex::Complex(int x, int y)
{cout<<"Vvedite deistvitelnuu chast i mnimuu chast";
cin>>x>>y;
a=x;b=y;};
Или так (правильнее)

Код:
Complex::Complex()
{cout<<"Vvedite deistvitelnuu chast i mnimuu chast";
cin>>a>>b;};
Все ок будет.

Последний раз редактировалось profi; 01.07.2009 в 01:33.
profi вне форума Ответить с цитированием
Старый 01.07.2009, 09:18   #65
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

profi, так получается, здесь е без указателя this можно обойтись? Так?
Dimarik вне форума Ответить с цитированием
Старый 01.07.2009, 10:08   #66
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Эта строка:
cin>>a>>b;
в итоге будет компилятором обрабатываться как:
cin >> this->a >> this->b;
Просто не обязательно явно this писать, но в любом случае всё будет работать через this. Так что: хотите писать this - пишите, не хотите - это за вас сделает компилятор
pu4koff вне форума Ответить с цитированием
Старый 01.07.2009, 12:06   #67
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

profi. "Обратите внимание на то, что в операторе инициализации задаётся тип и используется операция определения диапазона доступа:
int StringBad::num_strings=0;
Рассматриваемая инициализация включается в файл методов, но не в файл объявлений. Причина этого состоит в том, что объявление класса находится в заголовочном файле, а программа может включать заголовочный файл в несколько других файлов. Такое включение привело бы к появлению нескольких копий оператора инициализации, что являлось бы ошибкой.", - Стивен Прата. стр 545, 2ой абзац снизу.
вот в чём в принципе вопрос. Из вышесказанного следует, что не рекомендуется включать в заголовочный файл помимо прототипов функций ещё и их инициализацию. так?
или же ничего страшного не произойдёт, если в заголовочный файл помимо прототипов включать инициализацию функций (это очень удобно, так как инициализация занимает очень много места).
Dimarik вне форума Ответить с цитированием
Старый 01.07.2009, 12:38   #68
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

"однако можно иметь только один конструктор, заданный по умолчанию. Поэтому вы не сможете выполнить следующее действие:
Klunk() {klunk_ct=0}
Klunk (int n-0) { klunk_ct=n)//неоднозначность", - Стивен Прата.
Если я не ошибаюсь, конструктор по умолчанию - это конструктор, который не имеет аргументов. тогда почему не будет выполняться перегрузка конструкторов???
или я что-то не так понимаю?
Dimarik вне форума Ответить с цитированием
Старый 01.07.2009, 18:25   #69
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Во втором конструкторе n имеет значение по умолчанию, равное нулю.
Ну написали Вы:
Klunk a;
какой конструктор вызывать? Первый (по умолчанию) или второй, подставляя для n значение по умолчанию?
pu4koff вне форума Ответить с цитированием
Старый 01.07.2009, 19:59   #70
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

вот программа, состоящая из 3ёх файлов.
Код:
#ifndef TABTENNO_H_
#define TABTENNO_H_
//простой базовый класс
class TableTennisPlayer
{
private:
        enum {LIM=20};
        char firstname[LIM];
        char lastname[LIM];
        bool hasTable;
public:
        TableTennisPlayer (const char* fn= "none", const char* ln= "none", bool ht= false);
        void Name() const;
        bool HasTable() const {return hasTable;};
        void ResetTable (bool v) {hasTable = v;};
};
#endif
#include "tabtenn0.h"
#include <iostream.h>
#include <cstring>
TableTennisPlayer::TableTennisPlayer (const char* fn, const char* ln, bool ht)
{
        strncpy(firstname,fn, LIM-1);
        firstname[LIM-1]='\0';
        strncpy(lastname, ln, LIM-1);
        lastname[LIM-1]='\0';
        hasTable=ht;
}
void TableTennisPlayer::Name() const
{
        cout<<lastname<<", "<<firstname;
}
#include <iostream.h>
#include "tabtenn0.cpp"
main()
{
        TableTennisPlayer player1("Chuck", "Bizzard", true);
        TableTennisPlayer player2 ("Tare", "Boomdea", false);
        player1.Name();
        if (player1.HasTable())
                cout<<": has a table.\n";
        else
                cout<<": hasn't a table.\n";
        player2.Name();
        if (player2.HasTable())
                cout<<": has a table";
        else
                cout<<": hasn't a table.\n";
cin.get();
cin.get();
}
всё понятно, за исключением нескольких функций в заголовочном файле:
Код:
  TableTennisPlayer (const char* fn= "none", const char* ln= "none", bool ht= false);
        void Name() const;
        bool HasTable() const {return hasTable;};
        void ResetTable (bool v) {hasTable = v;};
почему в 1ой функции помимо объявления происходит ещё и определение аргументов? Это же должно быть в конструкторе...
и в последней и предпоследней функциях непонятно это:
{return hasTable;}
{hasTable = v;}
что это такое? и что оно делает в прототипах?
потом в 3ем файле, в самой программе используется функция HasTable().
в условии прописвано
if (player1.HasTable()). Можете пояснить само условие?? на что идёт проверка???
Dimarik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На счёт окошек Акашаев Нурлан Общие вопросы Delphi 2 26.06.2008 09:52
Как на счёт создания игрового 2D или 3D движка на C++? SalasAndriy Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 23.12.2007 23:05
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28
Помогите мне пожалуйста!На счёт книг! SADAM Свободное общение 1 08.06.2007 14:26