Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 12:40   #1
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию Инициализация переменных базового класса в дочернем классе

Есть 2 класса:
Код:
class A {
protected:
	int x;

public:

};

class B : public A {
public:
	B() : x(0) { // [BCC32 Error] console.hpp(29): E2312 'A::x' is not an unambiguous base class of 'B'

	}
};
Как инициализировать унаследованные переменные?
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 02.04.2012, 12:47   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Их обязан инициализировать базовый класс.
В дочернем можно только присвоить новое значение.
Код:
class B : public A {
public:
	B() 
	{
		A::x=0;
	}
};
EUGY вне форума Ответить с цитированием
Старый 02.04.2012, 12:55   #3
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Их обязан инициализировать базовый класс.
В дочернем можно только присвоить новое значение.
Код:
class B : public A {
public:
	B() 
	{
		A::x=0;
	}
};
Ясненько. Спасибо. А в чём здесь разница между A::x = 0 и x = 0?
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 02.04.2012, 13:00   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Ясненько. Спасибо. А в чём здесь разница между A::x = 0 и x = 0?
Мало-ли в классе B тоже есть член x.
Код:
class A {
protected:
	int x;
public:
};

class B : public A {
public:
int x;
};
Надо же их как-то различать. ) A::x B::x
EUGY вне форума Ответить с цитированием
Старый 02.04.2012, 13:03   #5
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Мало-ли в классе B тоже есть член x.
Код:
class A {
protected:
	int x;
public:
};

class B : public A {
public:
int x;
};
Надо же их как-то различать. ) A::x B::x
Не знал, что можно в дочерних классах объявлять переменные с такими же именами, как и в родительском. Ещё раз спасибо за объяснения
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 18.07.2022, 20:53   #6
swiftyd
Новичок
Джуниор
 
Регистрация: 18.07.2022
Сообщений: 1
По умолчанию

EUGY, спасибо
swiftyd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инициализация в классе t2skler Общие вопросы C/C++ 6 19.03.2012 21:54
Функция базового класса вызывает критическую ошибку при вызове для класса-потомка Archet Общие вопросы C/C++ 7 17.01.2012 20:17
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов Lanx Помощь студентам 0 06.04.2011 20:24
ООП - получить еще не созданный объект в дочернем классе Cronos20 PHP 7 30.11.2010 01:09
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54