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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2015, 16:13   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Класс в классе

Всем доброго времени суток!

Класс B находится в классе А в разделе private

как я понимаю об класс B я могу создать только из методов об класса А.

А что если класс B находится в классе А в разделе public:

могу ли я создать об класса B из main() ?

___________________________________ _______

Код:
#include <stdio.h>
#include <conio.h>

class A

{

private:

	int x;

	class B

	{
	
	public:

		int x;

		B(int c) : x(c) {printf("\nKONSTR B\n");}

		~B() {printf("\nDES B\n");}
	};

	public:

		A(int c) : x(c) {printf("\nKONSTR A\n");}

		~A() {printf("\nDES A\n");}

		int hgj() {return x;}

		int fdg()

		{
			 B s(666);

			 return s.x;
		}
};

int main()

{
	A s(66);

	printf("\n*** %d\n",s.hgj());

	

	printf("\n*** %d\n",s.fdg());

	getch();

	return 0;

}

Последний раз редактировалось RAFA91; 24.05.2015 в 16:15.
RAFA91 вне форума Ответить с цитированием
Старый 24.05.2015, 16:44   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

A::B name(66);
waleri вне форума Ответить с цитированием
Старый 24.05.2015, 17:29   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

waleri как я понял обьект класса А не будет создан ?

есть ли смысл класс B ложить в классе А в разделе public ?
RAFA91 вне форума Ответить с цитированием
Старый 24.05.2015, 18:54   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
waleri как я понял обьект класса А не будет создан ?

есть ли смысл класс B ложить в классе А в разделе public ?
смысл есть для так называемых "компонентов".

"компонент" - это класс, который проектируется по принципу:
"все что нужно для работы, ношу с собой".

рассмотрим код:

http://rextester.com/IEHW41134


Код:
#include <iostream>
#include <string>
#include <memory>


struct object
{
    struct data
    { 
        explicit data(const std::string& v)
            :mValue(v)
        {}
        
        std::string mValue; 
    };
    
    object()
        :mData()
    {}
    
    explicit object(data&& d)
        :mData( std::make_unique<data>(d) )
    {}
    
    
    template<class T>friend 
    ::std::basic_ostream<T>& 
    operator<<(::std::basic_ostream<T>& os, const object& obj )
        {
            return os << (obj.mData? obj.mData->mValue : "empty");
        }

    
private:
    std::unique_ptr<data> 
        mData;
    
};

int main()
{
    std::cout << "Hello, world!\n";
    
    object obj1;
    
    object obj2( object::data("hello\n") );
    
    std::cout << "must be 'empty' : " << obj1 <<'\n'
              << "must be 'hello' : " << obj2 <<'\n';
}
есть только два способа создать экземпляр класса object :
1 либо по дефолту
2 либо явно указав в качестве аргумента вложенный object:ata

таким образом, разработчик класса object задает жесткий контракт:
как именно можно работать с его классом.

зачем это нужно?
компонент максимально не зависит от окружающей среды.
максимально не зависит от инфраструктуры проекта.

такой подход позволяет разработчику класса object
по собственному усмотрению как угодно изменять класс data,
без необходимости оглядываться на код вызывающей стороны.
_Bers вне форума Ответить с цитированием
Старый 25.05.2015, 12:24   #5
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
"все что нужно для работы, ношу с собой".
большое спасибо - буду думть !
RAFA91 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На основе строки в виде суммы чисел создать класс,в классе написать функцию,вычисляющую результат.(Паскаль) нуб7 Помощь студентам 8 22.10.2014 20:49
класс в классе elf01 C++ Builder 0 25.09.2012 20:27
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Как правильно использовать класс в классе milenium Общие вопросы C/C++ 7 07.05.2011 10:55
Класс в классе Alex11223 Общие вопросы C/C++ 2 13.04.2011 23:10