IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

5 страниц V  1 2 3 > »   
Closed Topic Открыть новую тему 
> Ряд вопрсов по C++.
сообщение
Сообщение #1


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Вопрос 1.

А также сказать, сколько занимает в памяти следующий объект:



class A
{
int i; 2 byte
short s; 1 byte
static int si; 2 byte
virtual void vf(); 1 byte
}




Итого : 6 байтов правилбно ?

ps
Я только начал изучать С++ поэтому порой буду задавать простые и глупые вопросы.

Сообщение отредактировано: renesko1 -


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Во-первых, это машинно- и компиляторо-зависимо (у меня на машине sizeof(int) = 4, а не 2), во-вторых зависит также от установок выравнивания (если откомпилировать без ничего, результат будет один, если с #pragma pack(1) - то результат другой), ну и в третьих, кто тебе сказал что виртуальная функция тоже что-то занимает, и это надо считать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


эээ ну я ... не знаю ....
+ у меня вопрос можно ли здесь еще задавать небольшие вопросы или создовать новую тему ?


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Если будет много небольших вопросов, то лучше в этой ветке задавай, только нумеруй их тогда, чтобы не возникло путаницы при ответах и тему переименуй в "Ряд вопросов по с++" например.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Вопрос 2.
Не могу точно для себя понять зачем перед методами в классе ставить void ?


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


не обязательно void.
можно и int.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Чтобы объяснить компилятору, что метод ничего не возвращает. Вот синтаксис такой...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Вопрос 3.
Вот написал класс описввающий фигуру rectangle.
Он условен но меня волнует правильность.


classe rectangle {
int width, length ;
public :
rectangle (int, int) ;
void draw (int, int) ;
Int Calcarea () ;
Int CalcDiagonal () ;
}
//***************************************************
rectangle::rectangle (int w, int l) ;
{ if (w < 0) or (l < 0)
then { cout << " Error input data/n " ; exit ; }
width = w ;
length = l ;
}
//****************************************************
Int rectangle::Calcarea() ;
{ return width * length }
//****************************************************
void rectangle::draw (int x , int y) ;
{ rectangle(x, y, x + length, y + width) }
//****************************************************
Int rectangle::CalcDiagonal () ;
{ return sqrt(sqr(width) + sqr(length)) }
//************************end*******************************



Сообщение отредактировано: renesko1 -


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
меня волнует правильность.
В каком смысле "правильность"? Синтаксически пример неправильный, так что компилятор его не пропустит: отсутствуют точки с запятой в конце каждой строки, и после описания класса (а там, где они не нужны - присутствуют), слова then в С/С++ просто нет, так же как и функции sqr, ну и case-sensitivity языка тоже не даст программе откомпилироваться, если используешь тип int, то это не должен быть ни Int , ни INT... А только маленькими буквами...

Ну, а логически - фрагмент слишком маленький, чтобы что-то сказать...

P.S. Очень похоже на попытку дословного перевода с Паскаля...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Просто до этого у меня была монополия pascal


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


class, не classe


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


У меня тоже вопрос. Есть некий txt файл с числами, расположенными по числу на каждой строке, например:
1
2
3
И простая программа, которая считывает эти числа и выводит на экран. Проблема в том, что последяя цифра в файле дублируется и еще раз выводится. Что я не так делаю?
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
int main()
{
int price;
clrscr();
ifstream in("Input.txt");
while(!in.eof())
{
in>>price;
cout<<price<<endl;
}
in.close();
getch();
return 0;
}

Т.е. результатом будет:
1
2
3
3 //Почему дублирует?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Цитата
Почему дублирует?
Потому, что последняя строка - пустая... После прочтения последнего числа (тройки) конец потока еще не достигнут, значит, происходит попытка считать еще одно число. А не получилось, price остается прежним, печатается, и только теперь in.eof() возвращает истину... Чтобы избежать дублирования, подправляем чуть-чуть:

    while(in >> price) {
cout<<price<<endl;
}
in.close();

 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Спасибо, мисс_граффити и volvo, я купил себе наконец то книжку и теперь понимаю что за бред я понаписал.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Вопрос 4.



Как передать в функцию сточку для работы с ней ?


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Смотря что ты подразумеваешь под "строчкой" - это может быть и char *, и std::string, я уж не говорю о других обертках, которых в каждом компиляторе/библиотеке куча...

Если char *, то вот так, скажем:
...
void p(char *s) {
s[0] = '2'; // изменяешь строку
}

int main() {
char s[20] = "start\0";
p(s);
cout << s << endl; // печатаешь измененную

return 0;
}
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Ясно.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Вопрс 5.
"Написать иерархию классов, которые в конструкторе принимает строку и у которых есть открытый метод print, которые выводят эту строку на экран или в файл на диск."

Честно пытался понять, но както так не очень далеко ушел.
Можно хотя бы легкий пример.



--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






Не совсем понятно, зачем тут иерархия, это прекрасно делается в одном классе:
#include <iostream>
#include <fstream>

class base {
std::string s;
friend std::ostream& operator << (std::ostream&, const base&);
public:
base(const std::string& st): s(st) {
}

void print(std::ostream& os) {
os << s;
}
};

std::ostream& operator << (std::ostream& os, const base& b) {
os << b.s;
return os;
}


int main() {
base b("hello, world!");
b.print(std::cout); // выводим на экран

std::ofstream out("file.txt", std::ios::out); // создаем файл ...
b.print(out); // ... и пишем строку туда
out.close();

return 0;
}

 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


Вопрос 6.

Объясните, пожалуйста, почему в отличие от функции printf() аргументами для функции scanf() могут быть только адреса объектов программы, в частном случае - адреса ее переменных. Глупый вопрос, но буду очень признателен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

5 страниц V  1 2 3 > » 
Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 20:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name