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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.09.2015, 17:32   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Изучение C++/CLI после С++

Добрый день !

Помогите рассталковать термин :

структуры и классы ссылочного типа и типа значения .

как я понял структуры и классы ссылочного типа это те которые должны размещаться только в управляемой куче,

а структуры и классы типа значения это те , которые могут лежать либо в управляемой , либо в неуправляемой куче.
Изображения
Тип файла: jpg Б.JPG (25.2 Кб, 72 просмотров)
RAFA91 вне форума
Старый 09.09.2015, 18:24   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Наверно основная разница не в куче (вам какая разница где что лежит?), а в том, что value копируются при передаче в метод/присваивании и т.п., а если ref, то просто передается ссылка на тот же объект.

Зачем вы C++/CLI пытаетесь изучить если до вас всю предыдущую тему люди пытались донести, что лучше либо чистый С++ (в т.ч. например Qt), либо C#?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума
Старый 10.09.2015, 12:01   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
а если ref, то просто передается ссылка на тот же объект.
к примеру в func() передаю обьект A

Код:
MyClass A;

func(A);
Код:
void func(MyClass B) {}

в функции func{} обьект B ссылка обьекта A ?

___________________________________ _______

в чистом с++ писали так :

Код:
void  func(MyClass &B) {}
___________________________________ ________

на книги по C# пока нету денюшек.
RAFA91 вне форума
Старый 10.09.2015, 12:14   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну отдолжите скан на рутрекере пока нету

Если MyClass это ref class, то "MyClass B" разве будет работать вообще? По-моему в C++/CLI везде надо писать "MyClass^" (ссылка).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума
Старый 10.09.2015, 12:45   #5
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
По-моему в C++/CLI везде надо писать "MyClass^" (ссылка).

вроде знаком ^ обозначается указатель .

если так

Код:
void func(MyClass ^ B) {}
то к методу класса MyClass обращаемся так что-ли ?

Код:
B -> метод();
RAFA91 вне форума
Старый 10.09.2015, 13:19   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Видимо да. Там еще % для чего-то используется.

Гугл сломался?
https://msdn.microsoft.com/en-us/library/ke3a209d.aspx
http://www.codeproject.com/Articles/...ng-CLI-classes
https://en.wikipedia.org/wiki/C%2B%2B/CLI#Handles
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума
Старый 10.09.2015, 13:43   #7
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

вот к примеру два класса

Код:
ref class Student
{
    ...
};

...

Student^ student = gcnew Student();
student->SelectSubject("Math", 97);
Код:
value class Marks
{
public:
    int Math;
    int Physics;
    int Chemistry;
};

//...

Marks^ marks = gcnew Marks();
в обеих классах использованна утилита gcnew

так какую роль тогда играет слово ref и value ?
RAFA91 вне форума
Старый 10.09.2015, 14:50   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Я не пишу на C++/CLI, насколько я понял из быстрого гугления value class это что-то типа struct в C#, ну а ref class — как обычный class в C#.

Там вроде тоже нету разницы в синтаксисе между ними, но структуры (как и все ValueType) копируются при присваивании.

Ну и там нету никаких знаков для managed указателей как тут (и нативных C++ классов/структур), поэтому может быть не возникает такой путаницы.


Обычно struct (value class) используют для каких-то небольших объектов, которые удобнее/логичнее копировать, чем передавать как ссылку. Например, Point (x, y), Rectangle. И обычно делают так, чтоб их поля были неизменяемыми (immutable http://stackoverflow.com/questions/3...ucts-immutable).

https://www.google.com/search?q=.net...eference+types
https://www.google.com/search?q=.net+class+vs+struct
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.09.2015 в 14:59.
Alex11223 вне форума
Старый 10.09.2015, 14:59   #9
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

почитал одну из тех статей , которую Вы мне скинули и пришел к следующему :

к примеру

Код:
value class A {};

A ^b = gcnew A(); //в данном случае обьект b пошел в упраляемый стек.

A *с = new A(); //в данном случае обьект с пошел в неуправляемую кучу.
хотя может что-то и не допонял , так-как английский знаю плохо.
RAFA91 вне форума
Старый 10.09.2015, 15:59   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
к примеру
Как у вас "поссылке/позначению" скатилось до обсуждения разницы в new/gcnew?

value класс при присваивание будет копировать полностью, поэтому условно можно назвать позначению

ref - скопируется ссылка
p51x на форуме
Закрытая тема


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дебаг С++/CLI Максим 116 Помощь студентам 3 27.12.2013 22:17
Ошибки в C++/CLI Максим 116 Помощь студентам 2 25.12.2013 22:45
c++/cli danzel1 Общие вопросы C/C++ 3 25.07.2011 17:11
C/C++/CLI. Ynxarmed Visual C++ 1 31.08.2010 07:43
advapi32 и C++/CLI Artem89 Общие вопросы .NET 1 20.12.2009 18:22