Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
#1

Реализация класса - C++

07.05.2013, 16:04. Просмотров 1476. Ответов 20
Метки нет (Все метки)

Помогите понять пожалуйста.
Пример из Дейтела:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
#include "GradeBook.h"
 
using namespace std;
 
GradeBook::GradeBook(std::string name)
{
    setCourseName( name );
}
 
void GradeBook::setCourseName( string name )
{
if ( name.length() <= 25 )
    courseName = name;
else
    {
    courseName = name.substr( 0, 25 );
    cout << "Name \"" << name << "\" exceeds maximum length (25).\n" << "Limiting courseName to first 25 character\n" << endl;
    }
}
Вопрос, я помню что нельзя использовать переменные, объекты, функции до их объявления. Здесь используется setCourseName до его объявления и реализации. Как это работает? Если ответ в работе линковщика, компилятора или ответ будет дальше(например в стандарте) - просто так и напишите, дойду до этой темы сам постараюсь понять
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2013, 16:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализация класса (C++):

Реализация класса на базе класса Stack с возможностью !индексирования! - C++
Помогите пожалуйста!!! Нужно реализовать на базе класса stack другой класс с возможностью индексирования, а именно: Например 1 - й...

Реализация класса - C++
Спроектировать и реализовать класс BigInt, позволяющий хранить целые числа в диапазоне , и производить набор основных операций с ними. ...

реализация класса - C++
Дано: класс &quot;Фильмы&quot; (название, жанр, главные роли). Вопрос: Возможно ли такой подход к реализации? class films { string...

Реализация класса - C++
Так как только начал изучать с++, возникает вопрос: есть задание : Реализовать класс IntArray. Разработать тестовую программу для...

Реализация шаблона класса - C++
Большая-пребольшая просьба, помогите, пожалуйста, с решением данной задачи. Саму задачу реализовать не сложно, но вот с использованием...

Реализация класса proxy - C++
Помогите, пожалуйста , реализовать вспомогательный класс proxy, который может работать как заместитель контейнера (например вектора) и...

20
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.05.2013, 01:46  [ТС] #16
Это абсолютно логично и понятно что я должен знать такие вещи как статическая локальная переменная. Но должен ли я досконально понимать что происходит в следующих участках(вырезал первое что попалось под руку) препроцессированного кода, ведь есть еще такое понятие как неопределенное поведение(ну например х=++х+++х) или это не отсюда?
Цитата Сообщение от silent_1991 Посмотреть сообщение
typedef __time32_t time_t;
# 652 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\_mingw.h" 3
void __attribute__((__cdecl__)) __debugbreak(void);
extern __inline__ __attribute__((__always_inline__,__gnu_inline__)) void __attribute__((__cdecl__)) __debugbreak(void)
{
__asm__ __volatile__("int $3");
}




const char *__mingw_get_crt_info (void);






#pragma pack(pop)
# 11 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\crtdefs.h" 2 3
# 26 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\crtdefs.h" 3
typedef size_t rsize_t;
# 153 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\crtdefs.h" 3
struct threadlocaleinfostruct;
struct threadmbcinfostruct;
typedef struct threadlocaleinfostruct *pthreadlocinfo;
typedef struct threadmbcinfostruct *pthreadmbcinfo;
struct __lc_time_data;

typedef struct localeinfo_struct {
pthreadlocinfo locinfo;
pthreadmbcinfo mbcinfo;
} _locale_tstruct,*_locale_t;



typedef struct tagLC_ID {
unsigned short wLanguage;
unsigned short wCountry;
unsigned short wCodePage;
} LC_ID,*LPLC_ID;




typedef struct threadlocaleinfostruct {
int refcount;
unsigned int lc_codepage;
unsigned int lc_collate_cp;
unsigned long lc_handle[6];
LC_ID lc_id[6];
struct {
char *locale;
wchar_t *wlocale;
int *refcount;
int *wrefcount;
} lc_category[6];
int lc_clike;
int mb_cur_max;
int *lconv_intl_refcount;
int *lconv_num_refcount;
int *lconv_mon_refcount;
struct lconv *lconv;
int *ctype1_refcount;
unsigned short *ctype1;
const unsigned short *pctype;
const unsigned char *pclmap;
const unsigned char *pcumap;
struct __lc_time_data *lc_time_curr;
} threadlocinfo;
# 10 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\stdio.h" 2 3

# 1 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\_mingw_print_push.h" 1 3
# 12 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\stdio.h" 2 3

#pragma pack(push,_CRT_PACKING)
# 26 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\stdio.h" 3
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
# 80 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\stdio.h" 3
# 1 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\_mingw_off_t.h" 1 3
....................
__attribute__((__format__ (gnu_printf, 2, 0))) __attribute__((nonnull (1,2)))
int __attribute__((__cdecl__)) __mingw_vasprintf(char ** __restrict__ , const char * __restrict__ , va_list) __attribute__ ((__nothrow__));
# 381 "c:\\program files (x86)\\mingw32\\i686-w64-mingw32\\include\\stdio.h" 3
int __attribute__((__cdecl__)) fprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,...);
int __attribute__((__cdecl__)) printf(const char * __restrict__ _Format,...);
int __attribute__((__cdecl__)) sprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,...) ;

int __attribute__((__cdecl__)) vfprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,va_list _ArgList);
int __attribute__((__cdecl__)) vprintf(const char * __restrict__ _Format,va_list _ArgList);
int __attribute__((__cdecl__)) vsprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,va_list _Args) ;

int __attribute__((__cdecl__)) fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...) ;
int __attribute__((__cdecl__)) scanf(const char * __restrict__ _Format,...) ;
int __attribute__((__cdecl__)) sscanf(const char * __restrict__ _Src,const char * __restrict__ _Format,...) ;

int __attribute__((__cdecl__)) __ms_vscanf(const char * __restrict__ Format, va_list argp);
int __attribute__((__cdecl__)) __ms_vfscanf (FILE * __restrict__ fp, const char * __restrict__ Format,va_list argp);
int __attribute__((__cdecl__)) __ms_vsscanf (const char * __restrict__ _Str,const char * __restrict__ Format,va_list argp);

static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__ ((__nonnull__ (2)))
int vfscanf (FILE *__stream, const char *__format, __builtin_va_list __local_argv)
{
return __ms_vfscanf (__stream, __format, __local_argv);
}

static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__ ((__nonnull__ (2)))
int vsscanf (const char * __restrict__ __source, const char * __restrict__ __format, __builtin_va_list __local_argv)
{
return __ms_vsscanf( __source, __format, __local_argv );
}
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__ ((__nonnull__ (1)))
int vscanf(const char *__format, __builtin_va_list __local_argv)
{
return __ms_vscanf (__format, __local_argv);
}

...
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snscanf(const char * __restrict__ _Src,size_t _MaxCount,const char * __restrict__ _Format,...) ;
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snscanf_l(const char * __restrict__ input,size_t length,const char * __restrict__ format,_locale_t locale,...) ;
FILE *__attribute__((__cdecl__)) tmpfile(void) ;
char *__attribute__((__cdecl__)) tmpnam(char *_Buffer);
int __attribute__((__cdecl__)) ungetc(int _Ch,FILE *_File);

__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,...) ;
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snprintf_l(char * __restrict__ buffer,size_t count,const char * __restrict__ format,_locale_t locale,...) ;
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,va_list _Args) ;
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnprintf_l(char * __restrict__ buffer,size_t count,const char * __restrict__ format,_locale_t locale,va_list argptr) ;
int __attribute__((__cdecl__)) _sprintf_l(char * __restrict__ buffer,const char * __restrict__ format,_locale_t locale,...) ;
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
20.05.2013, 01:49 #17
Цитата Сообщение от Aliru Посмотреть сообщение
ведь есть еще такое понятие как неопределенное поведение
Это вообще не к месту. Есть такое понятие, и оно чётко оговорено в стандарте, равно как и все случаи оного. И уж конечно в заголовочных файлах стандартной библиотеки никакого неопределённого поведения нет и быть не может. В заголовочных файлах вообще никакого поведения нет, только объявления.
0
alkagolik
Заблокирован
20.05.2013, 02:25 #18
и хотел 5 копеек вставить, а все уже разъяснено.
0
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.05.2013, 12:11  [ТС] #19
Не так объяснил.
Сейчас попробую по другому.
В математике мы знаем основные формулы, например cos^2(X)+sin^2(X)=1 - которое тоже можно вывести - и другие типа cos(x+y)=... то есть нет необходимости учить наизусть или знать чему равен cos(37x). Верно ведь?
В С++ знание той же статической локальной переменной это база, но обязательно ли досконально понимать это
C++
1
2
3
4
5
6
7
8
9
10
11
12
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
 __attribute__ ((__nonnull__ (2)))
 int vsscanf (const char * __restrict__ __source, const char * __restrict__ __format, __builtin_va_list __local_argv)
 {
 return __ms_vsscanf( __source, __format, __local_argv );
 }
 static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
 __attribute__ ((__nonnull__ (1)))
 int vscanf(const char *__format, __builtin_va_list __local_argv)
 {
 return __ms_vscanf (__format, __local_argv);
 }
Или можно просто залезть куда-то(в стандарт? возможно), понять-почитать что это и как оно работает или это крайне важно на этапе "ускорения-усовершенствования" кода, ведь в итоге объектный код и его качество в конечном итоге зависит от того как хорошо написан компилятор командой Bjarne Stroustrup-а. Понятно что можно узнать все подробности работы стандарта(если его создал человек, скорее всего это возможно), но наступит предел. Как бы хорошо я не написал код он упрется в "качество" работы компилятора, линковщика...
Вопрос, наверное, должен был звучать так.
1 Вариант
Есть ли грань между хорошим програмистом(пишит качяествееный код, в поставленные сроки и работает в команде) и человеком который решил что с++ не достаточно хорош "внутри" и его надо подточить?
2 Вариант
Есть ли настоящая потребность в знании глубинных основ всего языка с++(всего стандарта так чтобы можно было спорить с его создателем), чтобы тебя взяли на нормальную работу(Это типа работа где средняя зарплата и нормальное отношение как к человеку,а не животному).
Постарался объяснить как мог, если что извиняюсь за такое количества "словоблудия"
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
20.05.2013, 13:08 #20
Цитата Сообщение от Aliru Посмотреть сообщение
но обязательно ли досконально понимать это
А что "это"? Именно этот (и подобные) кусок кода? Нет, особенно разбираться там не надо. Я привёл препроцессированный файл не для того, чтобы сказать, что всё это надо выучить, чтобы от зубов отскакивало, а просто для того, чтобы показать, с чем имеет дело именно компилятор (т.е. после работы препроцессора).
Цитата Сообщение от Aliru Посмотреть сообщение
1 Вариант
Не очень понял смысл. Что значит "подточить"? Ничего подтачивать не надо, это вы куда-то не в ту степь забрели...
Цитата Сообщение от Aliru Посмотреть сообщение
2 Вариант
Нет, не думаю, что такая потребность есть. Зачастую интервьюеры и сами-то не особо разбираются, взять хотя бы пример с тем моим сотрудником, который про static не знал. Он вполне мог бы проводить собеседование, верно?
2
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.05.2013, 13:52  [ТС] #21
Ура!
Наконец то все примерно утряслось. silent_1991, спасибо огромное за объяснения и терпение!
0
20.05.2013, 13:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 13:52
Привет! Вот еще темы с ответами:

Реализация класса матрица - C++
День добрый форум! Хочу узнать ваше мнение по поводу того, как лучше реализовать класс матриц. Какую структуру лучше выбрать?...

Реализация класса стека - C++
Приветствую! Пробую написать класс стека, но работает не совсем так, как задумывалось. Что-то не так с получением значения // Êëàññ...

Реализация класса Vector - C++
Добрый день всем! Пишу реализацию класса vector, но не могу разобраться, как написать ручные push_back и pop_back, может у кого есть...

Реализация класса С++ (плагин) - C++
Хорошего всем дня. Столкнулся с проблемой: Нужно написать плагин для существующей программы, исходного кода к ней нет. Из программы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru