Loading...
Jovanna avatar Jovanna 186 Точки

С++Advanced, Task_03_Range - дифолтен ctor

Здравейте,

в main() имаме Range r; , което означава дифолтен ctor; Как да се разпише, като в класа Range има включен клас, който има ctor инициализиращ с const * към Range,  знаем че константни полета се инициализират в инициализационния списък веднага и не се променят; За да инициализирам Range с дифолтен , няма как да знам пойнтера към range... ? 

    class ConstValueIterator {
        const Range* range;
        T currentValue;
        size_t countRemaining;
    public:
        ConstValueIterator(const Range* range, T currentValue)

Поздрави!

Тагове:
0
C++ Programming 13/11/2018 23:27:47
MartinBG avatar MartinBG 4803 Точки
Best Answer

ConstValueIterator е вложен клас в Range.

Той е напълно импелментиран и няма какво да пипаш по него.

 

Методите, които трябва да имплементираш са на Range класа:

  Range();

  void add(T value);

  size_t getCount(T value) const;

  void clear();

  void resize(T first, T last);

  bool empty() const;

  Range(const Range& other);

  Range& operator=(const Range& other);

  ~Range();

  size_t getIndex(T value) const;

 

1
13/11/2018 22:23:10
Jovanna avatar Jovanna 186 Точки

Здравей, благодаря за отговора,

това добре, но не разбирам при вложени класове не се ли инициализират задължително и вложените, когато се инициализира основния, например: клас Person, включва клас Body;  При инициализиране на Person, в ctor-a  му не се ли вика задължително и ctor-a на Body.?  A aко имахме const поле на Body, тогава как ще инициализираме дифолтно Person ако Body няма дифолтен ctor?

class Person {

    class Body {

        public:     double heightMeters;    double weightKgs; 

        Body(double heightMeters, double weightKgs) : heightMeters(heightMeters), weightKgs(weightKgs) { }

    };   

public:   string name;    int age = 0;     Body body;

    Person(string name, int age, double heightMeters, double weightKgs) : name(name),  age(age),   body(heightMeters, weightKgs) {

    }

};

0
MartinBG avatar MartinBG 4803 Точки

Привет,

Няма изискване вложените класове да бъдат инстанцирани едновременно с основния.

Потърси информация за nested classes в C++, а ако ти е интересно може да прочетеш и за The inner class idiom.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.