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

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

Восстановить пароль Регистрация
 
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.12.2012, 22:53     Абстрактные классы #1
Народ, вопрос есть такой.
Есть абстрактный класс
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 с явными параметрами, а не по умолчанию. Если явно вызываю пишет что создать экземпляр абстрактного класса невозможно.
Надеюсь вопрос понят.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 22:53     Абстрактные классы
Посмотрите здесь:

C++ абстрактные классы
C++ Абстрактные классы
Абстрактные классы C++
C++ Абстрактные классы
C++ Абстрактные классы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
16.12.2012, 22:55     Абстрактные классы #2
зачем вызывать конструктор класса А если он абстрактный?
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.12.2012, 22:58  [ТС]     Абстрактные классы #3
Там есть поля, которые наследуваются классом B( ну это актуально когда много классов с одинаковыми полями), и им надо присвоить определённое значение.

Добавлено через 1 минуту
Ну когда создаётся объект класса B,в начале вызывается конструктор класса A, вот как вызвать конструктор с определёнными параметрами?
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
16.12.2012, 23:00     Абстрактные классы #4
инициализировать те поля не конструктором а каким либо методом , и вызывать этот метод в потомке , как выход?
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.12.2012, 23:03  [ТС]     Абстрактные классы #5
Это-то понятно)) Хотелось поизящней так сказать одним методом) Ладно спасибо.
go
Эксперт C++
3582 / 1362 / 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 Посмотреть сообщение
зачем вызывать конструктор класса А если он абстрактный?
Как это зачем?
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 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)
{
}
век живи век учись!
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.12.2012, 23:11  [ТС]     Абстрактные классы #8
ОО, спасибо, про список инициализации недодумался!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 23:19     Абстрактные классы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 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 секунд
Так даже лучше.
Yandex
Объявления
16.12.2012, 23:19     Абстрактные классы
Ответ Создать тему
Опции темы

Текущее время: 07:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru