1 Востаннє редагувалося Дмитро-Чебурашка (19.01.2016 22:39:14)

Тема: Які бувають динамичні об'єкти класу створені у конструкторі похідного

Хай усем!         ...Щось я ничого не зкумекаю..       Які бувають динамичні об'єкти класу створені у конструкторі похідного класу та запам'ятовані у його полях?             


Я бажаю створити динамічні об'єкти класу ClassesSuperD всередині конструктора класу Main. Або ж у функциї клсу. Чим більше я на нього дивлюся тим більше престатю розуміти як цє зробити.
Ось бачитє, я ніби то створюю об'єкт, ClassesSuperD * BUF=new  ClassesSuperD (NULL, NULL); але об'єкт з параметрами, створюється взагалі то через клас і крапку, я ж
пишу його одразу після ,,нев ,, , дідько, я ничого не памятаю, як воно треба правильно створити об'єкт .. Загалом, як правильно синтаксис цієї справи, які можуть бути варіанти?
Чі можливо це взагалі? Та можливо, чого ж, але я таки щось заплутався, ничого не зміркую!
Точніше кажучі, я бачу, що щось воно в мене якось не тієї, якось не те я пишу..
Або я все ж вірно створив об'єкт?


Тобто, така форма запису, ClassesSuperD*BUF=new ClassesSuperD(NULL,NULL); вона вірна?






/*При реалізації успадковування допускається передача параметрів для конструкторів похідного й базового класу. 
Якщо параметри має тільки конструктор похідного класу, то аргументи передаються звичайним способом. Однак при необхідності 
передати аргумент конструкторові батьківського класу, потрібно трохи більше зусиль.

Насамперед, потрібно подбати про те, щоб передати з конструктора похідного класу конструкторові базового класу.

     Для цього використається розширений запис 
     конструктора похідного класу: конструктор_похідного_класу (список формальних параметрів) : конструктор_базового_класу (список фактичних параметрів) 
     { ... // тіло конструктора похідного класу }*/
     
/*Нижче про простих функцій C - у класі модифікатор "статичний" C ++ має й інше значення.

Якщо у вас є тільки один файл, цей модифікатор не має абсолютно ніякого значення. Різниця приходить у великих проектах з декількома файлами:

У C, кожен "Модуль" (поєднання sample.c і sample.h) складається самостійно і після цього кожен з цих скомпільованих об'єктних файлів (sample.o) пов'язані разом, щоб виконуваний файл компоновщиком.

Скажімо, у вас є кілька файлів, які ви включаєте в основний файл і два з них мають функцію, яка використовується тільки всередині для зручності називають add(int a, b) - компілятор легко створювати об'єктні файли для цих двох модулів, але компонувальник видасть помилку, тому що він знаходить дві функції з таким же ім'ям і не знаю, який він повинен використовувати (навіть якщо немає нічого, щоб зв'язати, тому що вони не використовуються десь ще, але в його власному файлі).

Ось чому ви робите це функція, яка використовується тільки внутрішня, статичну функцію. У цьому випадку компілятор не створює типовий "ви можете пов'язати цю річ" -flag для компоновщика, так що линкер НЕ бачити цю функцію, і не буде генерувати помилку.*/     

class Main:public ClassesSuperD  {
    private 
    ClassesSuperD* MainSpysok;

  public static void main(int argc, char *argv[]) {
      Main (){
       ClassesSuperD*BUF=new ClassesSuperD(NULL,NULL);
       MainSpysok=BUF;
      }
     
    DefaultConstructor Dc = new DefaultConstructor();//Конструктор за замовчуванням
    //конструктора похідного класу: конструктор_похідного_класу (список формальних параметрів) : конструктор_базового_класу (список фактичних параметрів) 
     //{ ... // тіло конструктора похідного класу }

  }
  
  /*ля базового й похідного класів припустиме використання тих самих параметрів.

     Не виключена можливість і того, що списки параметрів конструкторів похідного й базового класів будуть різні. 
     Крім того, конструкторові похідного класу немає необхідності використати всі аргументи, отримані для передачі в базовий 
     клас, тобто конструктор похідного класу може прийняти деякі аргументи тільки для того, щоб просто передати їх конструкторові базового класу, а сам може їх ніяк не використати.*/

2

Re: Які бувають динамичні об'єкти класу створені у конструкторі похідного

Принципово - так писати можна.
А чи треба - залежить від того, що це за клас, нащо він потрібен, як планується його використовувати і т.д.

Подякували: Дмитро-Чебурашка1

3

Re: Які бувають динамичні об'єкти класу створені у конструкторі похідного

Ваш код не компілюється.
чому немає двокрапок після private, public - це, що Java?

А це, функція всередині функції?

  public static void main(int argc, char *argv[]) {
      Main (){

Наводьте справжній код.

Подякували: Дмитро-Чебурашка1

4 Востаннє редагувалося Дмитро-Чебурашка (20.01.2016 16:40:11)

Re: Які бувають динамичні об'єкти класу створені у конструкторі похідного

Спасибі!! Так, дійсно .. А я ж і не пробував його скомпілювати. Я з ранку, точніше вже після обіду почитав його - ну повна нісенітниця виходить, звичайно ..   Й скомпілювати спробував.

main по ідеї друга функція з тією ж назвою: це виходить нісенітниця, використовувати буде не можна, навіть для понтів цього не трєба.

Я і конструктор впихнув всередину функциї класу - у голові була ідея що при виклику функциї будє створений об'єкт.  Напевно цє нісенитниця!  Адже ж він й так буде викликаний коли трєба.
Взагалі, часом у голові все що ні є якось плутається, плутається...