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

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

Войти
Регистрация
Восстановить пароль
 
Wolkodav
605 / 458 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
#1

Абстрактные классы - C++

16.12.2012, 22:53. Просмотров 439. Ответов 8
Метки нет (Все метки)

Народ, вопрос есть такой.
Есть абстрактный класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class A
{
protected:
int a;
public:
A(int b=0):a(b)
{
}
virtual ~A()=0;
};
A::~A()
{
}
Есть производный класс от него
C++
1
2
3
4
5
6
7
8
9
class B:public A
{
protected:
int c;
public:
B(int f=0):c(f)
{
}
};
А теперь вопрос. Как мне вызвать конструктор класса А при создание объекта класса B с явными параметрами, а не по умолчанию. Если явно вызываю пишет что создать экземпляр абстрактного класса невозможно.
Надеюсь вопрос понят.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 22:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Абстрактные классы (C++):

Абстрактные классы - C++
Ребята! Помогите с таким делом. Мне дали задание создать абстрактный класс Автомобиль, классы наследники: гоночный автомобиль, асфальтный...

Абстрактные классы - C++
void _tmain() { const int lim = 100; MyFunction *pFunc ; int count = 0; pFunc = new My_Exp; pFunc = new Line; pFunc...

абстрактные классы - C++
компилятор ругается когда я пытаюсь записать объект класса!!!! подскажите что я не правильно делаю!! #include <cstdlib> #include...

абстрактные классы - C++
Здрасте я при написании программы столкнулся с проблемой что немогу создать указатель на объект т.к. класс абстрактный прошу помогите...

Абстрактные классы - C++
Помогите плиз, экзаменационное задание, а разобраться не могу с ним: Создать консольное приложение, в котором реализовать работу...

Абстрактные классы - C++
В общем есть у нас 2 абстрактных класса CA и CB и 2 дочерних от них класса CC и CD. Как сделать так чтобы CD наследовал CB поверх которого...

8
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
16.12.2012, 22:55 #2
зачем вызывать конструктор класса А если он абстрактный?
0
Wolkodav
605 / 458 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.12.2012, 22:58  [ТС] #3
Там есть поля, которые наследуваются классом B( ну это актуально когда много классов с одинаковыми полями), и им надо присвоить определённое значение.

Добавлено через 1 минуту
Ну когда создаётся объект класса B,в начале вызывается конструктор класса A, вот как вызвать конструктор с определёнными параметрами?
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
16.12.2012, 23:00 #4
инициализировать те поля не конструктором а каким либо методом , и вызывать этот метод в потомке , как выход?
1
Wolkodav
605 / 458 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.12.2012, 23:03  [ТС] #5
Это-то понятно)) Хотелось поизящней так сказать одним методом) Ладно спасибо.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.12.2012, 23:04 #6
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
30
31
32
33
34
35
36
37
#include <iostream>
 
class Abstract 
{
public:
   Abstract(const int&)
   {
      std::cout << "Constr Abstruct Class" << std::endl;
   }  
   virtual void AbstrFun();
   ~Abstract()
   {
      
   }
};
 
class Derived : public Abstract
{
public:
   Derived() : Abstract(5)
   {
      
   }
   void AbstrFun()
   {
      
   }
   ~Derived()
   {
      
   }
};
 
int main()
{
   Derived object;
}
http://liveworkspace.org/code/sIfya$0

Добавлено через 23 секунды
Цитата Сообщение от Nixy Посмотреть сообщение
зачем вызывать конструктор класса А если он абстрактный?
Как это зачем?
2
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
16.12.2012, 23:05 #7
go, так у вас не абстрактный класс, а класс с виртуальной функцией ,разные вещи, хотя ваш способ работает
C++
1
2
3
4
5
6
7
8
class B:public A
{
protected:
int c;
public:
B(int f=0):A(f),c(f)
{
}
век живи век учись!
0
Wolkodav
605 / 458 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.12.2012, 23:11  [ТС] #8
ОО, спасибо, про список инициализации недодумался!
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.12.2012, 23:19 #9
Nixy, прошу прощения. Поспешил
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
30
31
32
33
34
35
36
37
#include <iostream>
 
class Abstract 
{
public:
   Abstract(const int&)
   {
      std::cout << "Constr Abstruct Class" << std::endl;
   }  
   virtual void AbstrFun() = 0;
   virtual ~Abstract()
   {
      
   }
};
 
class Derived : public Abstract
{
public:
   Derived() : Abstract(5)
   {
      
   }
   void AbstrFun()
   {
      
   }
   ~Derived()
   {
      
   }
};
 
int main()
{
   Derived object;
}
http://liveworkspace.org/code/2v7Sm0

Nixy, спасибо.

Добавлено через 12 секунд
Так даже лучше.
0
16.12.2012, 23:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 23:19
Привет! Вот еще темы с ответами:

Абстрактные классы - C++
Никак не могу понять смысл абстрактных данных.Ведь мы можем использовать и обычный класс,только абстракция запрещает создавать объекты.

Абстрактные классы - C++
Объясните пожалуйста почему это не работает и как исправить? cannot declare variable 'b1' to be of abstract type 'classB' because the...

Абстрактные классы - C++
Помогите пожалуйста, сообразить не могу. Есть абстрактный класс. У него есть метод, чтение из файла. Есть производный от него класс....

Абстрактные классы. Интерфейсы - C++
Помогите пожалуйста!!! Лабораторная работа по ООП. Тема: Абстрактные классы. Интерфейсы. Цель: получить навыки создания иерархии...


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

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

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