Private и protected
Автор Мурад Ахундов задал вопрос в разделе Другие языки и технологии
Зачем нужны классы в c++? Никак не могу понять... Что такое private, public зачем они нужны и т. д? и получил лучший ответ
Ответ от
потому что не используешь на практике. ерунду всякую пишешь.
попробуй написать GUI сначала на winapi который без ООП как такового, потом на qt, который с ООП. вот тогда и поймешь зачем
Ответ от Максим[гуру]
Изучай ооп. Могу скинуть пример на java, чтоб понял сам принцип. public и private это видимость, private не виден извне.
Создаём объект Human - человека:
Human human = new Human(23,"Петя");
Где передали параметры 23 (возраст) и "Петя" (имя) в конструктор. Эти параметры сохранены в объекте human в его полях. Теперь вызываем для данного объекта функцию, которая имеет доступ к полям объекта.
int age = human.getAge(); функция getAge, вызванная у объекта human типа Human, вернула его возраст. Вызываем другой метод: human.kill();
Теперь создаем наследника классу Human, назовём его Child. Child является Human, но может переписать методы класса Human и добавить новые, таким образом расширить класс и изменить.
Human human2 = new Child(23,"Вася",human); тут у конструктора есть дополнительный параметр, где задаётся родитель ребёнка.
Теперь вызываем human2.kill(); этот метод мог быть переписан.
Изучай ооп. Могу скинуть пример на java, чтоб понял сам принцип. public и private это видимость, private не виден извне.
Создаём объект Human - человека:
Human human = new Human(23,"Петя");
Где передали параметры 23 (возраст) и "Петя" (имя) в конструктор. Эти параметры сохранены в объекте human в его полях. Теперь вызываем для данного объекта функцию, которая имеет доступ к полям объекта.
int age = human.getAge(); функция getAge, вызванная у объекта human типа Human, вернула его возраст. Вызываем другой метод: human.kill();
Теперь создаем наследника классу Human, назовём его Child. Child является Human, но может переписать методы класса Human и добавить новые, таким образом расширить класс и изменить.
Human human2 = new Child(23,"Вася",human); тут у конструктора есть дополнительный параметр, где задаётся родитель ребёнка.
Теперь вызываем human2.kill(); этот метод мог быть переписан.
Ответ от Cтранник[гуру]
на первый взгляд классы, private, public - это показуха у "умных" программистов. если программа пишется для себя и строк там всего ничего, то легко можно обойтись структурным программированием и времени уйдет меньше. всегда можно понять что делает эта программа и где могут находиться ошибки. а если эта же программа со временем становится побольше, появится много повторяющегося кода и возможно кто-то другой попытается понять что там происходит, то лучше уж один раз понять как работают классы и как их можно использовать. потому что допустим код программы стал занимать минимум 10000 строк, то уже через пару месяцев самому (не то что другому человеку) будет очень сложно понять что делает программа. а классы сильно уменьшат количество строк и новых переменных. private и public также сильно помогут если кто-то другой начнет разбираться в программе или если со временем забудется программа. всегда можно будет догадаться, что некоторая переменная или функция не должна использоваться из внешних классов
на первый взгляд классы, private, public - это показуха у "умных" программистов. если программа пишется для себя и строк там всего ничего, то легко можно обойтись структурным программированием и времени уйдет меньше. всегда можно понять что делает эта программа и где могут находиться ошибки. а если эта же программа со временем становится побольше, появится много повторяющегося кода и возможно кто-то другой попытается понять что там происходит, то лучше уж один раз понять как работают классы и как их можно использовать. потому что допустим код программы стал занимать минимум 10000 строк, то уже через пару месяцев самому (не то что другому человеку) будет очень сложно понять что делает программа. а классы сильно уменьшат количество строк и новых переменных. private и public также сильно помогут если кто-то другой начнет разбираться в программе или если со временем забудется программа. всегда можно будет догадаться, что некоторая переменная или функция не должна использоваться из внешних классов
Ответ от Krab Bark[гуру]
Коротко - классы это блоки, из которых строят программы. Естественно, строительство из блоков нужно только для довольно крупных сооружений, но когда ты работаешь в Windows, даже для простых программ для современного ввода-вывода надо использовать оконный интерфейс, а он сам по себе - такая сложная штука, что построен по ООП из классов.
Коротко - классы это блоки, из которых строят программы. Естественно, строительство из блоков нужно только для довольно крупных сооружений, но когда ты работаешь в Windows, даже для простых программ для современного ввода-вывода надо использовать оконный интерфейс, а он сам по себе - такая сложная штука, что построен по ООП из классов.
Ответ от Люблю Украину (improve)[гуру]
public, private и protected это модификаторы доступа. Что бы управлять доступом к переменным и функциям класса.
А класс это когда переменные и функции находятся в одной оболочке. Так удобней. Плюс ещё есть инкапсуляция, полиморфизм и наследование. Это так же работа с группой переменных и функций, которые поместили в класс.
public, private и protected это модификаторы доступа. Что бы управлять доступом к переменным и функциям класса.
А класс это когда переменные и функции находятся в одной оболочке. Так удобней. Плюс ещё есть инкапсуляция, полиморфизм и наследование. Это так же работа с группой переменных и функций, которые поместили в класс.
Ответ от Недо Ум[гуру]
Создавая классы человек может программировать как бы на более высоком уровне, объектами.
Если в низкоуровневом программировании программируют командами, потом в более высокоуровневом программировании уделяют внимание функциям, структуре, то уже в ооп за основу ложатся моделируемые объекты.
Объекты описываются в классе. Описать можно всё что угодно. Например, автомобили для игр, или персонажей, или реальных людей, Всё что нужно. Даже абстракцию какую нибудь.
Это всё в конечном итоге помогает собрать программу.
с ООП связаны 3 понятия.
полиморфизм
Инкапсуляция
наследование
инкапсуляция. По сути это и создание объекта, например можно инкапсулировать кошку, создать её компьютерную модель, написать класс. Дальше уже внутренние данные класса (поля) могут быть защищёнными, закрытыми или открытыми. private public protected
когда создается class то все члены в нём закрыты, по умолчанию.
class A{
int x, y, z;
}
можно сделать члены открытыми или защищёнными добавив директивы public protected
class A{
int x; // privae
public:
int y; // public
protected:
int z; // protected
private:
int g; // опять закрытая переменная
}
Вся эта чушь с закрытыми членами нужна только для библиотек которыми будут пользоваться другие люди. если ты пишешь для себя, можешь подумать о них чисто для удобства в некоторых случаях.
в C++ структура это тот же класс, только по умолчанию все переменные уже открыты - public
struct A{
int x, y, z; //все открыты
}
что означает открытые члены и закрытые?
class A{
int x;
public:
int y;
int get_x(){ x = 5; return 5; }
}
int main(){
A a;
a.x = 5; // ошибка. x недоступен
a.y = 5; // ok
int x = a.get_x(); //вызвали функцию которая меняет значение закрытой переменной и возвращает её значение
return 0;
}
закрытые члены класса скрывают от пользователя его внутреннюю реализацию. По сути то что открыто в классе, это его интерфейс.
Подобно как в автомобиле, интерфейс это руль, а что скрыто внутри автомобиля это закрытые члены.
наследование. Один класс может наследовать другой. Например есть графический пользовательский интерфейс. Всё что мы видим это элементы. Каждый элемент подразделяется на кнопки, текстовые поля картинки и так далее.
class GUIElement{
int x, y, x2, y2; //например координаты на экране
};
class GUIButton : public GUIElement[
}
GUIButton наследует класс GUIElement. можно добавить описатели private public protected, не обязательно.
Не помню что по умолчанию, но если public то все public переменные базового класса станут public для дочернего. Если protected то доступны все члены. непомню точно.
Это всё реализует идею полиморфизма.
Один интерфейс для обработки множеств разных объектов.
например
int get_x_from_gui_element( GUIElement element ){
return element.x;
}
потом например есть кнопка
GUIButton button;
и уже можно указывать кнопку как аргумент
get_x_from_gui_element( button );
Создавая классы человек может программировать как бы на более высоком уровне, объектами.
Если в низкоуровневом программировании программируют командами, потом в более высокоуровневом программировании уделяют внимание функциям, структуре, то уже в ооп за основу ложатся моделируемые объекты.
Объекты описываются в классе. Описать можно всё что угодно. Например, автомобили для игр, или персонажей, или реальных людей, Всё что нужно. Даже абстракцию какую нибудь.
Это всё в конечном итоге помогает собрать программу.
с ООП связаны 3 понятия.
полиморфизм
Инкапсуляция
наследование
инкапсуляция. По сути это и создание объекта, например можно инкапсулировать кошку, создать её компьютерную модель, написать класс. Дальше уже внутренние данные класса (поля) могут быть защищёнными, закрытыми или открытыми. private public protected
когда создается class то все члены в нём закрыты, по умолчанию.
class A{
int x, y, z;
}
можно сделать члены открытыми или защищёнными добавив директивы public protected
class A{
int x; // privae
public:
int y; // public
protected:
int z; // protected
private:
int g; // опять закрытая переменная
}
Вся эта чушь с закрытыми членами нужна только для библиотек которыми будут пользоваться другие люди. если ты пишешь для себя, можешь подумать о них чисто для удобства в некоторых случаях.
в C++ структура это тот же класс, только по умолчанию все переменные уже открыты - public
struct A{
int x, y, z; //все открыты
}
что означает открытые члены и закрытые?
class A{
int x;
public:
int y;
int get_x(){ x = 5; return 5; }
}
int main(){
A a;
a.x = 5; // ошибка. x недоступен
a.y = 5; // ok
int x = a.get_x(); //вызвали функцию которая меняет значение закрытой переменной и возвращает её значение
return 0;
}
закрытые члены класса скрывают от пользователя его внутреннюю реализацию. По сути то что открыто в классе, это его интерфейс.
Подобно как в автомобиле, интерфейс это руль, а что скрыто внутри автомобиля это закрытые члены.
наследование. Один класс может наследовать другой. Например есть графический пользовательский интерфейс. Всё что мы видим это элементы. Каждый элемент подразделяется на кнопки, текстовые поля картинки и так далее.
class GUIElement{
int x, y, x2, y2; //например координаты на экране
};
class GUIButton : public GUIElement[
}
GUIButton наследует класс GUIElement. можно добавить описатели private public protected, не обязательно.
Не помню что по умолчанию, но если public то все public переменные базового класса станут public для дочернего. Если protected то доступны все члены. непомню точно.
Это всё реализует идею полиморфизма.
Один интерфейс для обработки множеств разных объектов.
например
int get_x_from_gui_element( GUIElement element ){
return element.x;
}
потом например есть кнопка
GUIButton button;
и уже можно указывать кнопку как аргумент
get_x_from_gui_element( button );
Ответ от =Serge=[гуру]
А не нужно понимать то, к чему мозг ещё не дорос. Вот будет 18 - поймёшь, почему.
А не нужно понимать то, к чему мозг ещё не дорос. Вот будет 18 - поймёшь, почему.
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Зачем нужны классы в c++? Никак не могу понять... Что такое private, public зачем они нужны и т. д?
Классы в C#. Что такое элементы в составе класса и что такое члены класса, в чем различие? (язык c#)
Посмотрите тут
Члены класса это методы (функции) , а элементы наверное поля класса (
подробнее...
спросили в Класс
В чем различие ключевых слов public и static в java? И объясните конкретно , что такое экземпляр класса.
Просто поймите разницу между классом и объектом. Класс - это абстракция, он описывает структуру
подробнее...
В чем различие ключевых слов public и static в java? И объясните конкретно , что такое экземпляр класса.
Просто поймите разницу между классом и объектом. Класс - это абстракция, он описывает структуру
подробнее...
Java, наследование и private с protected
сразу скажу, это не только для java, но можно даже говорить в целом обо всех ООП языках
1)
подробнее...
Java, консольное приложение
Обычно под get-ом понимают метод, который возвращает данные через return. В противном случае это
подробнее...
вопрос по С++. объясните что такое пространство имен? зачем нужны.. как юзаются... и тд.. а то я вообще не врубаю))
В принципе любая пара скобочек {} определяет пространство имен. Любые переменные объявленные в этом
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Inheritance VRR
помогите с созданием калькулятора в delphi...
Можешь просто:
/ процедура обработки события KeyPress
procedure Edit1.KeyPress(var
подробнее...
помогите с созданием калькулятора в delphi...
Можешь просто:
/ процедура обработки события KeyPress
procedure Edit1.KeyPress(var
подробнее...
спросили в Freemium
помогите пожалуйста!!)) visual studio c++ windows form
Если координатную сетку так просто разрисуй линии и все.
public ref class Form1 : public
подробнее...
помогите пожалуйста!!)) visual studio c++ windows form
Если координатную сетку так просто разрисуй линии и все.
public ref class Form1 : public
подробнее...
спросили в Наивность
Объектно ориентированное программирование. (ООП)
Так никто нормально и не ответил!
Три признака ООП: инкапсуляция, наследование и полиморфизм.
подробнее...
Объектно ориентированное программирование. (ООП)
Так никто нормально и не ответил!
Три признака ООП: инкапсуляция, наследование и полиморфизм.
подробнее...
спросили в Объекты HIP
Класс в с++.
класс - объект, объявляется так:
class /*здесь вводишь имя класса*/ temp_class
{
подробнее...
Класс в с++.
класс - объект, объявляется так:
class /*здесь вводишь имя класса*/ temp_class
{
подробнее...
спросили в User all User all 0
Оператор присваивания C++
Проблема с самоприсваиванием давно и легко решена:
#include <iostream>
подробнее...
Оператор присваивания C++
Проблема с самоприсваиванием давно и легко решена:
#include <iostream>
подробнее...
Вопрос по C# StreamReader
у объекта стримридера есть такая функция считать строку ReadLine()
считываешь, добавляешь её к
подробнее...
спросили в Inheritance
как в делфи запустить приложение из директории программы
получить директорию программы:
app_dir:=ExtractFilePath(Application.Exename);
а для
подробнее...
как в делфи запустить приложение из директории программы
получить директорию программы:
app_dir:=ExtractFilePath(Application.Exename);
а для
подробнее...
спросили в Мартин IV
Какие команды программирование в java сущестуют.
abstract
continue
for
new
switch
assert
default
goto*
подробнее...
Какие команды программирование в java сущестуют.
abstract
continue
for
new
switch
assert
default
goto*
подробнее...