Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Ковыряю книжку по C++, начинающий.  [new]
АСУ ТПшник
Member

Откуда:
Сообщений: 1370
Ниже рабочий код из книги, который работает.

//: C11:HowMany.cpp
// A class that counts its objects
#include <fstream>
#include <string>
using namespace std;
ofstream out("HowMany.out");
class HowMany {
 static int objectCount;
public:
 HowMany() { objectCount++; }
 static void print(const string& msg = "") {
 if(msg.size() != 0) out << msg << ": ";
 out << "objectCount = "
 << objectCount << endl;
 }
 ~HowMany() {
 objectCount--;
 print("~HowMany()");
 }
};
//конец класса

/////////////////////////////////////////////////////////////////////////////////////////// 
int HowMany::objectCount = 0;  /////// КОГДА ЭТО ВЫПОЛНЯЕТСЯ?
// Pass and return BY VALUE:
HowMany f(HowMany x) {             /////// КОГДА ЭТО ВЫПОЛНЯЕТСЯ?
 x.print("x argument inside f()");   /////// КОГДА ЭТО ВЫПОЛНЯЕТСЯ?
 return x;                                    /////// КОГДА ЭТО ВЫПОЛНЯЕТСЯ?
}
///////////////////////////////////////////////////////////////////////////////////////////

// начало программы
int main() {
    out << "hi" << endl;
 HowMany h;
 HowMany::print("after construction of h");
 HowMany h2 = f(h);
 HowMany::print("after call to f()");
} ///:~


Если быть болгг точным - функция вне всего, это как?
Когда инициализация производится?

Сообщение было отредактировано: 7 апр 21, 09:44
5 апр 21, 17:50    [22304691]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Dima T
Member

Откуда:
Сообщений: 15705
АСУ ТПшник
[b]int HowMany::objectCount = 0;  /////// КОГДА ЭТО ВЫПОЛНЯЕТСЯ?

До начала работы main()

АСУ ТПшник
HowMany f(HowMany x) {             /////// КОГДА ЭТО ВЫПОЛНЯЕТСЯ?

Когда вызовут f(), в твоем случае тут
АСУ ТПшник
int main() {
...
 HowMany h2 = f(h);
....
5 апр 21, 18:00    [22304700]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
АСУ ТПшник
Member

Откуда:
Сообщений: 1370
Dima T,

я не пойму как функция может болтаться вне класса. Она же за пределами и функции входа и за пределами класса. Что это за место? К чему она относится? Это анонимная функция, ни к чему не принадлежащая? Типа глобальная анонимная или что?
5 апр 21, 18:09    [22304706]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52888

АСУ ТПшник
я не пойму как функция может болтаться вне класса.

Ты точно начал книжку читать с первой главы? Там где-нибудь точно должна описываться
структура Си программы. Объявление функций, реализация функций. И да, это не Ява. Функции
бывают просто функциями, а не методами классов.

Posted via ActualForum NNTP Server 1.5

5 апр 21, 18:24    [22304719]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
White Owl
Member

Откуда:
Сообщений: 12678
АСУ ТПшник
Dima T,

я не пойму как функция может болтаться вне класса. Она же за пределами и функции входа и за пределами класса. Что это за место? К чему она относится? Это анонимная функция, ни к чему не принадлежащая? Типа глобальная анонимная или что?
Почему анонимная? У нее есть имя - "f".

Ты пришел в С++ из Java? В чисто объектных языках действительно нельзя делать функции, только методы класса.
А в не-объектных языках нельзя делать классы с методами классов и есть только функции.
С++ гибридный язык, он может делать как методы класса, так и функции не относящиеся к какому-то классу. Эзотерически говоря можешь считать их методами принадлежащими воображаемому классу "моя программа". В официальной терминологии С++ это просто функция.
5 апр 21, 18:26    [22304721]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
АСУ ТПшник
Member

Откуда:
Сообщений: 1370
White Owl,
спасибо. доходчиво.

Тема исчерпана.
5 апр 21, 18:31    [22304732]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52888

АСУ ТПшник
Ну был немного

А простые процедурные языки вообще никогда не изучал что ли?..

Posted via ActualForum NNTP Server 1.5

5 апр 21, 18:31    [22304733]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
АСУ ТПшник
Member

Откуда:
Сообщений: 1370
Что я только не изучал... на чем я только не работал... интегратором же начинал для АСУ ТП.

Меня как раз сбило с толку, что тут классы намешаны с функциями.
Потом подумал - ну объявил ты заранее функцию, кого волнует какая она и где,
ее потом компилятор воткнет куда надо (типа инлайнит как бы),
Я бы вообще забил на функцию, но тут еще эта статик переменная, которая тоже не пойми когда инициализируется. Если ее попытаться при объявлении инициализировать, то компилятор не даст этого сделать.
Говорит что все нон-констант будь любезен "initialize out of line".

Тут у меня и закипело. Я начал думать - а почему так? Какого хрена я не могу по месту объявления инициализировать, а вне всего вообще - запросто. И вобщем мой хрупкий внутренний мир рассыпался.
5 апр 21, 19:12    [22304745]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52888

АСУ ТПшник
Я бы вообще забил на функцию, но тут еще эта статик переменная, которая тоже не пойми
когда инициализируется.

Тогда гугли на тему "глобальные переменные в Си".

Posted via ActualForum NNTP Server 1.5

5 апр 21, 19:14    [22304748]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
petrav
Member

Откуда:
Сообщений: 2850
АСУ ТПшник

Тут у меня и закипело. Я начал думать - а почему так? Какого хрена я не могу по месту объявления инициализировать, а вне всего вообще - запросто. И вобщем мой хрупкий внутренний мир рассыпался.

Попробуй пометить эту переменную как inline -- тогда по идее сможешь.
5 апр 21, 19:15    [22304749]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Dima T
Member

Откуда:
Сообщений: 15705
petrav
АСУ ТПшник

Тут у меня и закипело. Я начал думать - а почему так? Какого хрена я не могу по месту объявления инициализировать, а вне всего вообще - запросто. И вобщем мой хрупкий внутренний мир рассыпался.

Попробуй пометить эту переменную как inline -- тогда по идее сможешь.

Инлайн переменная? Месье знает толк в извращениях :)
5 апр 21, 21:59    [22304809]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
petrav
Member

Откуда:
Сообщений: 2850
Dima T
petrav
пропущено...

Попробуй пометить эту переменную как inline -- тогда по идее сможешь.

Инлайн переменная? Месье знает толк в извращениях :)

Да я сам в шоке, но нынче жизнь такая.

struct Foo
{
    static inline auto const MyStdString = "123"s;
};
5 апр 21, 22:26    [22304820]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
AmKad
Member

Откуда:
Сообщений: 5250
АСУ ТПшник,

У Вас ужасное форматирование. Читать тяжело. Если Вы работаете в VS, то рекомендую Вам CodeMaid.
6 апр 21, 11:43    [22304961]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7558
Dima T
petrav
пропущено...

Попробуй пометить эту переменную как inline -- тогда по идее сможешь.

Инлайн переменная? Месье знает толк в извращениях :)
+1)
6 апр 21, 11:49    [22304965]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
АСУ ТПшник
Member

Откуда:
Сообщений: 1370
Это копипаста из книги в теги СОДЕ вставленная.
6 апр 21, 11:49    [22304966]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7558
АСУ ТПшник,
>Меня как раз сбило с толку, что тут классы намешаны с функциями.
Все меняется в этой лапше.
Уже вводятся пакеты, модули, пространства имен.
Поэтому глобальное уже не рекомендуется даже в Си
6 апр 21, 11:53    [22304968]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7558
АСУ ТПшник
Это копипаста из книги в теги СОДЕ вставленная.
тебе написали. Ты сам лапшекод не форматируешь.
Его причесывать надо после вставки.
6 апр 21, 11:56    [22304970]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34684
АСУ ТПшник

Если быть болгг точным - функция вне всего, это как?
Когда инициализация производится?


Парень, учи С++, читай книжки.

Прата
Дейтелы
Лимпман.

Одна из этих книг тебе нужна, ты должен прочитать их и постичь азы.
ПОТОМ программировать.
6 апр 21, 15:39    [22305091]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34684
АСУ ТПшник,

Теги типа [b] нельзя ставить внутри секции кода, там никакие теги не работают.
Исправил.
6 апр 21, 15:43    [22305093]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10917
В src работают теги выделения цветом.
6 апр 21, 17:15    [22305128]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
petrav
Member

Откуда:
Сообщений: 2850
Basil A. Sidorov
В src работают теги выделения цветом.

Жалко только этих тегов в редакторе нет.
6 апр 21, 22:26    [22305208]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1941
MasterZiv
...внутри секции кода, там никакие теги не работают...

void foo{
  int i = 10; // int
  int j = 12; // Вся строка
  int k = i + j;
};


[src cpp]
void foo{
  >>>int<<< i = 10; // int
==>  int j = 12; // Вся строка
  int k = i + j;
};

[ /src]


Сообщение было отредактировано: 7 апр 21, 09:40
6 апр 21, 22:42    [22305211]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3759
да это неявные (ручные) теги, мало кто смотрит в "мануал" местного редактора
6 апр 21, 22:51    [22305213]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34684
ъъъъъ,

Не знал, спасибо.
7 апр 21, 09:49    [22305275]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Dima T
Member

Откуда:
Сообщений: 15705
Alex_Ustinov
да это неявные (ручные) теги, мало кто смотрит в "мануал" местного редактора

В мануал можно не лезть, достаточно увидеть в чужом посте и нажать "Цитировать", будет видно как автор этого добился.
7 апр 21, 09:56    [22305279]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3759
Dima T,

я к этому таким образом и пришел...
причем "желтым" дааавно никто не метил..
7 апр 21, 23:00    [22305722]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3759
кстати
неконстантную переменную можно инициализировать в классе с inline в c++17
class HowMany {
    inline  static int objectCount = 10; // c++17 позволяет
вчера, 00:52    [22307366]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3759
АСУ ТПшник,

А по какой теме кусок кода?
в этом примере столько ньюансов, что складывается мнение - Книга очень Нехорошая
вчера, 01:10    [22307369]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
petrav
Member

Откуда:
Сообщений: 2850
Alex_Ustinov
кстати
неконстантную переменную можно инициализировать в классе с inline в c++17
class HowMany {
    inline  static int objectCount = 10; // c++17 позволяет

Для такого типа это поддерживает и С++11. :)
вчера, 10:04    [22307468]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3759
petrav,

константные - да, с++11
неконстантные - нет

main.cpp|7|warning: inline variables are only available with -std=c++17 or -std=gnu++17|

// в примере кода ТС счетчик экземпляров объекта, неконстанта, поэтому инициализация вне класса
int HowMany::objectCount = 0; 
вчера, 11:15    [22307516]     Ответить | Цитировать Сообщить модератору
 Re: Ковыряю книжку по C++, начинающий.  [new]
petrav
Member

Откуда:
Сообщений: 2850
Alex_Ustinov
petrav,

константные - да, с++11
неконстантные - нет

main.cpp|7|warning: inline variables are only available with -std=c++17 or -std=gnu++17|

// в примере кода ТС счетчик экземпляров объекта, неконстанта, поэтому инициализация вне класса
int HowMany::objectCount = 0; 

Да, я не обратил внимание, что она не константная.
вчера, 11:17    [22307519]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / C++ Ответить