@frilix
Иногда "творю"

Наследование классов?

Ошибки при наследовании классов . Не наследуются конструкторы , кроме конструктора по умолчанию.
main.h
#include <iostream>
#include <cstring>

class Stroka
{
    private:
        char *p_char; // Указатель на строку
        unsigned int size; // Длина строки
    public:
        /* Конструктор без параметров */
        Stroka()
        {
            size = 1;
            p_char = new char[size];
            *p_char = '\0';
            std::cout << "КОНСТРУКТОР  БЕЗ  ПАРАМЕТРОВ" << std::endl;
        }

        /* Конструктор с  параметрами */
        Stroka(const char *st)
        {
            size = strlen(st);
            p_char = new char[size];
            strcpy(p_char, st);
            std::cout << "КОНСТРУКТОР  С  ПАРАМЕТРАМИ" << std::endl;
        }

        /* Конструктор с  параметрами*/
        Stroka(const char ch)
        {
            size = 2;
            p_char = new char[size];
            p_char[0] =  ch;
            p_char[1] = '\0';
            std::cout << "КОНСТРУКТОР  С  ПАРАМЕТРАМИ КОТОРЫЙ ПРИНИМАЕТ СИМВОЛ" << std::endl;
        }

        /* Конструктор  копирования */
        Stroka(const Stroka &st)
        {
            size = strlen(st.p_char);
            p_char = new char[size];
            strcpy(p_char, st.p_char);
            std::cout << "КОНСТРУКТОР  С  КОПИРОВАНИЯ" << std::endl;
        }

        /* Вывод  строки на  экран */
        void Print()
        {
            std::cout << "ОТЛАДОЧНАЯ ПЕЧАТЬ\n" << p_char << std::endl;
        }

        /* Перегрузка  присваивания */
        Stroka operator=(const Stroka &st)
        {
            std::cout << "ПЕРЕГРУЗКА ОПЕРАЦИИ" << std::endl;
            delete [] p_char;
            p_char = new char[st.size];

            strcpy(p_char, st.p_char);
            return *this;
        }

        /* Длина  строки */
        unsigned int Size()
        {
            return strlen(p_char);
        }

        /* Деструктор */
        ~Stroka()
        {
            delete [] p_char;
            std::cout << "ДЕСТРУКТОР" << std::endl;
        }

};

class Str_Indef: public Stroka{};

using namespace std;

int main()
{
    Str_Indef str("test");

    str.Print();
    str.Size();
    return 0;
}


Ошибки компилятора:
ceada8f30cf641eaa9f6c309c1f9ce7f.png
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
Adamos
@Adamos
class Str_Indef: public Stroka
{
public:
    using Stroka::Stroka;
}

При условии, что у вас компилируется С++11. До этого в С++ наследования конструкторов не было вовсе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы