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

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

Войти
Регистрация
Восстановить пароль
 
ZayacV
2 / 2 / 2
Регистрация: 27.10.2013
Сообщений: 72
#1

Какие методы родительского класса не наследуются? - C++

04.05.2014, 15:04. Просмотров 300. Ответов 1
Метки нет (Все метки)

1. конструктор копирования
2. конструктор по умолчанию
3. перегруженная операция присваивания
4. деструктор
5. конструктор с параметрами
6. виртуальные
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 15:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Какие методы родительского класса не наследуются? (C++):

Какие методы родительского класса не наследуются? - C++
1. конструктор копирования 2. конструктор по умолчанию 3. перегруженная операция присваивания 4. деструктор 5. конструктор с...

Какие методы класса fstream отвечают за определение количества строк в файле и длины строки? - C++
Привет всем. Знакомлюсь я тут с потоковым файловым вводом-выводом, скажите пожалуйста, какие методы класса fstream, отвечают за определение...

внук родительского класса не может работать с полями дедовского класса; почему? - C++
Не всё так просто на самом деле. Непонятно, какую роль во всём этом играют шаблоны. Но к делу. Вот код: class base { public: base...

Может ли метод родительского класса обратиться к полю дочернего класса - C++
Может ли метод родительского класса обратиться к полю дочернего класса?

Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса? - C++
Ну то есть так: есть родительский и дочерний класс, в родительском определен виртуальная функция и вызывается в его конструкторе (камень...

Вызов конструктора из родительского класса - C++
Как вызвать конструктор для производного класса из родительского?

1
Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 169
04.05.2014, 17:25 #2
Если у наследованного класса есть конструктор с параметрами и нет конструктора по умолчанию, то компилятор не напишет его за вас. Но это не значит, что конструктор по умолчанию для базового класса исчез. Его по прежнему можно применять явно написав в списке инициализаций или неявно, потому что он все равно будет вызван, если список инициализаций пуст. Если не написать конструктор копии компилятор додумает по своему усмотрению (копирование поле в поле это не тоже самое, что побитовое -- для полей классов будут вызваны конструкторы копий), опять же у вас будет два разных конструктора копии. Если передать в функцию принимающую базовый класс по значению, то будет вызван конструктор копии из базового. Если передать в функцию принимающую по значению наследованный класс, то конструктор копии из наследованного.

Добавлено через 35 минут
То же относится к конструктору с параметрами, в унаследованном можно применять в списке инициализаций. Оператор присваивания перегруженный будет додуман компилятором для вариантов базовый=наследованный наследованный=наследованный. Если добавить отладочную печать в оператор присваивания и в конструктор копии базового класса можно понять, что в данном случае не используется конструктор копии базового класса и используется перегруженный оператор присваивания.

Добавлено через 9 минут
Деструктор у базового и у наследованного свои, можно лишь добавить, что для базового нужно его сделать виртуальным, если через указатель типа базового класса нужно вызвать правильную цепочку деструкторов от наследованного к базовому. К виртуальным методам можно сказать, что нужно использовать указатель иначе передав в функцию по значению базового класса будут вызываться статически методы из базового класса.

Добавлено через 31 минуту
Кликните здесь для просмотра всего текста

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include "Base.h"
#include "Derived.h"
 
void main()
{
    Derived B(1);
    std::cout<<B.a<<"\n";
    Derived C(B); //copy
    std::cout<<C.a<<"\t"<<C.b<<"\n";
    Derived D(6);
    D= C; //op=
    std::cout<<D.a<<"\t"<<D.b<<"\n";
    Base E(3);
    E = D; // op=
    std::cout<<E.a<<"\n";
    Base F = E; //copy
    std::cout<<E.a<<"\n";
    //int (**p)()  = new (int (*[10])());
}
Base.h
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma once
class Base
{
public:
    Base(void);
    ~Base(void);
    Base(int);
    Base(Base& b);
    Base& operator= (Base&);
    int a;
};
Base.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include "Base.h"
 
Base::Base(void)
{
    a=7;
}
 
Base::~Base(void)
{
}
 
Base::Base(int n)
{
    a=n;
}
 
Base::Base(Base& b)
{
    a=4;
    std::cout<< "Use copy Base ";
}
 
Base& Base::operator=(Base& b)
{
    a=9;
    std::cout<<"Use op= ";
    return *this;
}
Derived.h
C++
1
2
3
4
5
6
7
8
9
10
#pragma once
#include "base.h"
class Derived :
    public Base
{
public:
    int b;
    Derived(int);
    ~Derived(void);
};
Derived.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include "Derived.h"
 
Derived::Derived(int n):Base()
{
    b=n;
}
 
Derived::~Derived(void)
{
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2014, 17:25
Привет! Вот еще темы с ответами:

Вызов метода родительского класса - C++
Всем доброго вечера! Читаю Р. Лафоре. Он пишет: Т.е. исходя из этого, можно предположить, что производный класс имеет...

Вызов конструктора родительского класса - C++
Здравствуйте, столкнулся с такой проблемой: при вызове конструктора класса потомка (Derv1) через наследование конструктора из базового...

Доступ к переменной родительского класса - C++
Добрый день, уважаемые форумчане, изучаю классы в с++, есть вопрос: можно ли вызвать public функцию или переменную родительского класса...

Как вызвать метод родительского класса; - C++
Собственно вопрос; Есть класс a и b; Класс b унаследован от класса a; И как теперь из класса b вызвать функцию класса a;


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

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

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