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

Программа взаимодействует с классом исключительно через интерфейс. Однажды класс меняется и меняется его хидер. Надо ли перекомпилировать всю программ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Получить новую матрицу, переставляя ее блоки размера nxn http://www.cyberforum.ru/cpp-beginners/thread803977.html
Прошу помощи с написанием программы. Дана действительная квадратная матрица порядка 2n. Получить новую матрицу, переставляя ее блоки размера nxn. (см. рисунок). Желательно с применением функций ( malloc , calloc )
C++ Перезагрузка операций Всем привет, есть такая задача. Создать класс - дата с полями в закрытой части: день (1-31), месяц (1-12), год (целое число). Определить необходимые конструкторы, методы доступа, деструктор. Перегрузить потоковые операции ввода и вывода, операции + (увеличение на n дней) - (разница между двумя датами), < и >=. Вообщем не знаю как сделать это " Перегрузить потоковые операции ввода и вывода,... http://www.cyberforum.ru/cpp-beginners/thread803971.html
C++ Назначение static ?
Здравствуйте. Я уже прочитал в двух книгах про статик,читал в википедии,но так и не понимаю для чего он ? Кучи больших текстов и объяснений для чего он,я так и не пойму конкретно,когда мне его нужно использовать. Вы бы не могли максимально просто и понятно объяснить?) Неплохо было бы с простыми примерами. То есть когда для переменных использовать,когда для функций.
C++ Выбор первого ЯП для изучения
Всем привет. Я хочу начать учить свой первый ЯП, до этого изучал pascal и C#(Четверь книги Шилдта по 4.0). Есть желание писать программы под Linux(ubuntu), точнее я хотел бы написать свой аудио-плеер. Пока склоняюсь к C++ или Java. Какой на ваш взгляд ЯП стоит учить?
C++ Сделать эту же программу через классы и указатели http://www.cyberforum.ru/cpp-beginners/thread803962.html
Есть программа, её нужно реализовать, используя классы и указатели. Помогите это сделать! (Программа считает расстояние, заносит значение в массив и сортирует по возрастанию) #include <iostream.h> #include <math.h> #include <conio.h> #include <string> const int n=1000; int A;
C++ Даны натуральное число n, действительные числа a1, …, an Текст задачи Даны натуральное число n, действительные числа a1, …, аn. Если последовательность а1, …, an упорядочена по не убыванию (т. е. Если а1<=a2<=…<=an), то оставить ее без изменения. Иначе получить последовательность аn, …, a1. подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,302
10.03.2013, 21:01  [ТС]     Программа взаимодействует с классом исключительно через интерфейс. Однажды класс меняется и меняется его хидер. Надо ли перекомпилировать всю программ
Короче я щас разбирался со всем этим делом и вот к какому выводу пришёл. Имеем взаимодействие между main и объектом через абстрактный класс:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//main.cpp
#include <windows.h>
#include <stdio.h>
#include "abstr.h"
#include "stats.h"
 
abstr* p= new stats; 
int main() {
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 p->foo_0();  
 p->foo_6();  
 getchar ();
 return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//abstr.h
#ifndef _ABSTR_H
#define _ABSTR_H
class abstr {
 public:
  virtual void foo_3  ()= 0;
  virtual void foo_8  ()= 0;
  virtual void foo_4  ()= 0;
  virtual void foo_2  ()= 0;
  virtual void foo_0  ()= 0;
  virtual void foo_5  ()= 0;
  virtual void foo_9  ()= 0;
  virtual void foo_6  ()= 0;
  virtual void foo_1  ()= 0;
  virtual void foo_7  ()= 0;
};
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//stats.h
#ifndef _STATS_H
#define _STATS_H
#include "abstr.h"
class stats: public abstr {
 public:
  void foo_6  ();
  void foo_1  ();
  void foo_7  ();
  void foo_2  ();
  void foo_4  ();
  void foo_9  ();
  void foo_3  ();
  void foo_5  ();
  void foo_8  ();
  void foo_0  ();
};
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//stats.cpp
#include "stats.h"
#include <stdio.h>
 
void stats::foo_2 ()  {printf ("два___\n");};
void stats::foo_0 ()  {printf ("ноль__\n");};
void stats::foo_9 ()  {printf ("девять\n");};
void stats::foo_4 ()  {printf ("четыре\n");};
void stats::foo_1 ()  {printf ("один__\n");};
void stats::foo_3 ()  {printf ("три___\n");};
void stats::foo_6 ()  {printf ("шесть_\n");};
void stats::foo_7 ()  {printf ("семь__\n");};
void stats::foo_5 ()  {printf ("пять__\n");};
void stats::foo_8 ()  {printf ("восемь\n");};
Теперь компилим:
Bash
1
2
3
rem кропаем main.o
del main.o
g++ -c main.cpp
Так вот что я хочу сказать. Вот у нас щас образовался main.o, так вот там вызываемые функции УЖЕ ИДЕНТИФИЦИРОВАНЫ. Не именами, конечно, но смещениями. Первая находится по смещению 10h, вторая по смещению 1Ch. Я смотрел это
Bash
1
nm main.o
И эти смещения фундаментальны, они уже есть и не изменятся. Это смещения от начало какой-то таблицы, чёрт его знает какой, выясним. Но по крайней мере, они соответствуют положениям функций в хидере абстрактного класса. Ага, значит при компиляции мы привязаны к абстрактному классу. Один определённый вывод есть, то есть при измененеии абстрактного класса, надо перекомпилировать и main.o

...Так, а поток компилим
Bash
1
2
3
4
5
6
7
rem кропаем stats.o
del stats.o
g++ -c stats.cpp
 
rem кропаем main.exe
del main.exe
g++ -o main.exe main.o stats.o
и порядок тел функций в main.exe будет точно соответствовать положению функций в stats.cpp. Так, а потом я смотрел в отладчике: при работе main.exe программа лезет в таблицу виртуальных функций и по по смещению 10h берёт там адрес функции, которая в перечне функций файла *.cpp будет первой (та, которая выводит ноль).
; потом такое же поведение при поиске функции по смещению 1Ch- она в таблице по этому смещению берёт адрес функции, которая 6-я (выводит шесть)

Таким образом я определил, что связующее звено между main.exe и реализацией объекта это хидер абстрактного класса. А хидер объекта может меняться сколько угодно- он влияет на результаты линковки только опосредованно, через хидер абстрактного класса.

Ну вот и всё, разобрался я с этим. Вот кому интересно, тут похожая тема (но не идентичная) тема c законченным выводом:
При перекомпиляции сервера перекомпилируется клиент, а что, собственно в этом плохого?
и вот ещё факультативно:
Методы вызываются через указатель на объект класса; Как компилятор определяет, какой из методов надо вызвать?
 
Текущее время: 21:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru