C # 개발자를위한 C ++


24

나는 C #을 잘 알고 (슬프게도), Windows 응용 프로그램을 위해 C ++ 프로그래밍을해야합니다. C #을 배우는 C ++ 개발자를위한 많은 정보를 찾을 수 있었지만 이미 C #을 알고있을 때 C ++을 배우는 데는 많은 도움이되지 못했습니다. 누구든지 기본에 대해 잘 알고 있습니까?

MSDN에는 비교가 있지만 깊이는 없습니다.

여러 소스를 함께 모을 수 있지만 무언가가 있다고 생각했습니다. 단지 찾을 수 없습니다. 당신의 도움을 주셔서 감사합니다.


27
왜 "슬프게"? 그런 식으로 자신을 쓰지 마십시오. 나는 독학 되지 않은 C # 개발자를 모른다 . 많은 사람들이 놀라운 개발자입니다.
Steven Evers

6
@SnOrfus-주로 학계가 불합리한 의사 정치적인 이유로 그것을 피했기 때문에.
Rei Miyasaka

5
저의 첫 번째 조언은 C #의 맥락에서 C ++을 배우려고하지 않습니다. C #은 C ++이 아니고 C ++은 C #이 아니기 때문입니다. 그것은 어리석은 진술 일지 모르지만 C #은 포인터를 잘못하기 어렵게 만들고 실제로 C ++에서 쉽게 할 수있는 도구를 사용하여 C ++에서 잘못하기 쉽습니다. 두 언어가 공통적으로 공유하는 것이 많이 있습니다. 기본적으로 사과와 오렌지는 나무에서 자라고 씨앗이있어서 과일이라고 말합니다.
Ramhound

2
C # 개발자가 VB .NET을 보는 방식과 달리 @ReiMiyasaka.
Kyralessa

1
@Kyralessa 또한 불행한 종류입니다. CB 얼리 어답터 대부분은 C / C ++ 배경을 가지고 있기 때문에 VB.NET 인구 통계에 대한 상식이므로 정치적 문제는 아닙니다. 우리 학교는 초보자 과정에 VB.NET을 사용했습니다. 그들은 VB.NET이 장난감이라고 생각하는 것처럼 보이므로 C #만큼 학생들의 마음을 부패해서는 안됩니다.
Rey Miyasaka

답변:


10

Java 개발자를위한 C ++ 의이 스레드 는 매우 유사하며 특히 Mark Byer의 게시물에서 유용합니다.

이 책들을 읽으십시오 :

아마도 명심해야 할 가장 중요한 것은 C # / Java와 C ++의 메모리 관리 기술의 차이점이해하는 것입니다 .

내 교수 중 한 사람은 Java 배경에서 왔으며 C ++ 과정을 케이크로 생각했습니다. 그가 설명한 것은 아무에게도 의미가 없습니다. 그는 도처에 메모리 누수가있었습니다. 그의 포인터 산술은 끔찍했습니다. 그는 강의 계획서의 OOP 부분에 결코 도달하지 못했습니다 (감사합니다). 그가 실제로 보여주지 않은 것은 아무것도 없었다. 그는 char[]센티넬 이 필요하다는 것을 이해하지 못했습니다 \0. 그처럼 끝나지 마십시오.


4
동정 것을 C ++에서 아무도 사용하지 char[]다음 , 그렇지?
DeadMG

5
@DeadMG 난 당신의 요점을 볼 수 없습니다. 그냥 있기 때문에 char[]거의 C에서 사용되지 ++가 가르쳐 또는이 가르쳐되어서는 안된다는 아니에요 의미하지 않는다. char[]여전히 C ++은 C의 상위 집합이기 때문에 인식하는 것이 중요하며, 그것의 필수적 입니다 경우 올바르게 이해할 수 있다고는 전혀 배울 수 있습니다.
Rei Miyasaka

7
예 , 언어의 다른 모든 측면에 대해 숙달 한 후 아주 오랜 시간이 걸렸습니다 . 차라리 신입생들에게 템플릿 전문 분야와 SFINAE를 가르치고 싶습니다. C ++에서는을 사용 std::string하고 C API와 상호 작용 해야하는 경우 그 c_str()목적이 있습니다. 프로그래머 char[]가 그 중 어떤 것도 NULL 종료 를 처리 할 필요가 없습니다 . C 스타일 문자열 처리는 이전 C 코드와의 interop를 제외하고 가능한 모든 용도에 대해 완전히 그리고 완전히 사용되지 않습니다 c_str().
DeadMG

4
char[]모든 사용법 char[]이 잘못 되었기 때문에 가르치는 것과 같은 것은 없습니다 . 교수가 C 대신 C ++를 고수했다면 아마 괜찮을 것입니다.
DeadMG

4
당신은 것입니다 내가 C 코드는 C를 학습하는 경우 ++, 당신은 C.로 I의 한 말을 배울 필요가,, 결과적으로는 C 쓰기 여부를 C ++에서 사용 여부를 자신을, 그리고 볼 수 없는 그것을 묵과하지만,의 사실 오에스 및 특정 연구 운영체제를 제외하고, 절대적으로 당신은이를 위해 C를 필요로 - 문제는 학생들이 OS 디자인 같은 것들을 가르 칠 필요가 있기 때문에 학교는 일반적으로 나중에 C ++에서 C 다음 압정을 가르 칠 것입니다 C 문자열을 이해할 필요가있다. 다시 말하지만, 세 번째로, 만약 내가 길을 가졌다면, 나는 C ++을 1 학년 학생들에게 전혀 가르치지 않을 것 입니다.
Rei Miyasaka

14

불행히도, 기본적인 C ++에 대해서는별로 많지 않으므로 희망을 얻지 못할 것입니다. 또한 C ++로 원격 전송할 수있는 C #에 대해 거의 알지 못하므로 해당 각도를 다루는 특정 자료가 없을 것으로 기대합니다. 처음부터 배워야합니다.


3
그것은 왜 그렇게 많지 않은지를 설명 할 것입니다. C ++을 읽은 후에는 약간 정확하다고 생각됩니다. 완전히 다른 세계입니다. 당신의 도움을 주셔서 감사합니다.
Mark Williams

1
+1, C ++에 대해 원격으로 전송할 수있는 C #에 대해서는 거의 알지 못합니다 . 나는 이것을 어려운 방법으로 배웠다.
ApprenticeHacker

요약하자면, 기본적인 C ++이 많이 있다고 말하고 싶습니다. 포인터 / 참조를 구별하고 C ++ 템플릿을 사용하면 처음에는 머리를 돌리는 것이 가능하지만, 그 cout목표를 달성 할 때 여전히 간단한 목표를 달성하는 클래스 와 간단한 방법이 있습니다.
Kieren Johnstone

1
@KierenJohnstone : 아마도 "어레이-투-포인터 쇠퇴"와 같은 "일을하는 느리고 예외적 인 안전하지 않은 방법"을 의미 할 것입니다.
DeadMG

12
완전히 도움이되지 않는 답변.
dbracey

9

이에 대한 쉬운 해결책은 없으며 C ++은 특별히 어렵지는 않지만 초보자에게는 쉽지 않습니다.

나는 C 프로그래밍의 기초를 읽고 (당신이 찾을 저수준 물건의 기초를 얻기 위해) STL을 배우고 Scott Meyers와 같은 기사를 읽도록 권장합니다. 여기에 하나의 당신이 C-와-클래스에 비해, 현대 C ++를 작성해야 어떻게 같이, 당신이 시작할 수 있도록.


2
+1 : Meyer 's 책 (유효한 C ++ / STL 시리즈)을 추가하고 싶습니다. 나는 그들 모두를 가지고 있고 그들은 굉장합니다.
Steven Evers

12
의 경우 -1입니다 reading up on C programming. 나는 이것이 좋은 것보다 더 해롭고 C와 C ++가 함께 공부해야하는 언어라는 개념을 전달한다고 생각한다.
sebastiangeiger

2
@sebastiangeiger : 기존의 실제 C ++ 응용 프로그램과 작업해야 할 때 C와 같은 구문을 가장 자주 다루어야한다는 요점을 놓쳤습니다. 따라서 최소한 downvote를 제거하기 위해 +1하십시오.
Doc Brown

5
@DocBrown 어쩌면, 지금은 C ++ 레거시 프로젝트 중 하나에 있으며 전임자는 소스 파일을 * .cpp로 저장 한 C 프로그래머 일 뿐이라고 말할 수 있습니다. 나는 deleteC 배열을 사용하는 것보다 훨씬 적게 C 배열과 C ++에서 권장하지 않는 것들을 사용하고 있음을 알았 습니다 .C를 명시 적으로 연구하지 않는 것입니다.
sebastiangeiger

3
@gbjaanb : 아무것도 알 필요 STL에 대해 전혀, 없습니다 mallocfree. 훌륭한 C ++ 개발자는 결국 그들에 대해 알고 싶어 할 것입니다. 그들과 함께 시작하는 것은 완전히 다른 것입니다.
DeadMG

7

자료를 계속 찾고 있는지 잘 모르겠습니다. 몇 달 전에이 기사를 찾았습니다. 책이 아닙니다 (53 페이지 만 해당). 소개에 모든 내용이 나와 있습니다.

This is a somewhat short guide to the important things to know if you are a C# programmer and find yourself needing or wanting to work in C++

http://geekswithblogs.net/mikebmcl/archive/2012/02/02/c-to-c-ndash-a-somewhat-short-guide.aspx

또한 업데이트 게시물도 있습니다.

http://geekswithblogs.net/mikebmcl/archive/2012/02/14/c-to-cndasha-somewhat-short-guide-update-1.aspx

행복한 학습 :)


이 문서를 사용할 때는 매우주의해야합니다. C ++은 매우 Microsoft 중심적인 방식으로 표시됩니다 (그렇게 말합니다). C ++ 03과 C ++ 11 기능을 구분하지 않으며 때로는 비표준 확장을 선호하는 솔루션으로 표시하기도합니다. 해당 가이드를 따르면 이식성이 높은 코드가 생깁니다.
Fabio Fracassi

4
  • 메모리 관리를 찾으십시오. C #과 달리 C ++에서 포인터와 참조가 작동하는 방식에 대한 명확한 아이디어를 얻으십시오. 또한 RAII, 수동 메모리 관리 및 스마트 포인터.
  • 템플릿과 제네릭은 비슷해 보이지만 다른 짐승입니다. 템플릿 작동 방식의 내부를 파악하십시오.
  • 작지만 눈에 띄는 구문상의 차이점이 있습니다. 그들을 배우십시오.
  • .net BCL 대신 STL에 익숙해졌습니다. LINQ 중독이 있으면 좋은 소식을 놓칠 수 있습니다.
  • C ++과 C # 사이에는 근본적인 디자인 차이가 있습니다. 따라서 아이디어를 이식 할 수는 없습니다. C ++로 빌드하는 것은 무엇이든 처음부터 디자인해야합니다.
  • 행운을 빕니다

1

C #에서 C ++ 자습서를 너무 많이 찾지 못하는 것이 좋습니다. 그들은 아마 당신의 두뇌를 방해 할 수 있습니다. 오토바이를 먼저 타고 자전거를 타는 법을 배우는 것과 비슷합니다 (전적으로 적절한 신학은 아니지만 아이디어를 얻습니다). C ++에 대한 신선한 책을 읽는 것이 좋습니다. OOP 개념에 대해 잘 알고 있으므로 OOP 개념에 대한 긴 소개를 건너 뛸 수 있습니다 (C에서 C ++로 마이그레이션하는 사람들을위한 것임). 또는 초급부터 중급 또는 중급 수준의 참고 서적을 구하기 위해 간신히 가십시오.


1

Rosetta Code로 이동하여 둘을 비교하는 것이 좋습니다. C ++ 관용구의 링크를 편리하게 유지하고 발견하십시오. 그런 다음 포인터 / 참조 / 메모리 / 소멸자 영역에서 시간을 보내십시오. 그 전처리기에 대해 배운 후에는 추악한 것을 숨길 때 친구가 될 수 있습니다. 마지막으로 STL.


1

그래서 약 1 년 전에 저는 여러분과 같은 보트에있었습니다. C ++를 배울 필요성을 느낀 자기 학습 C # 개발자. 물론 나는 여러 번 멈추고 시작했다. 세 번째 시도에서 나는 마침내 그것을 꿰 뚫었다.

이해해야 할 것은 C ++ 및 C # 방법론 측면에서 포인터와 참조를 통해 데이터 조작 방법이 실제로 의미 하는 바는 무엇 이며 상황에 따라 언제 어떻게 사용하는지 이해하는 데 많은 시간을 할애 할 것 입니다.

C ++의 좋은 점은 객체 스택 할당이 대부분 매우 간단하다는 것입니다. 프로그램이이 방법으로 지정된 요구 사항을 충족 할 경우 이러한 방식으로 객체를 할당해야합니다. 그렇지 않으면 속도, 효율성 및 빠른 정리를 위해 포인터에 의존합니다. http://www.parashift.com/c++-faq-lite/ 를 읽는 것이 좋습니다. C ++이 어떻게 작동하는지에 대한 많은 기술적 이해를 제공합니다.

예를 들어 보겠습니다.

C ++에는 "초기화 목록"으로 알려진이 생성자 구현이 있는데, 이는 생성자 본문에서 클래스 멤버를 초기화하는 것과 다릅니다. 왜? 초기화되는 유형이 기본이 아닌 한 컴파일러는 실제로 ctor의 본문에 할당 될 때 생성되는 객체의 여러 개의 불필요한 복사본을 만듭니다 . 이는 컴파일러 및 앱의 확장 된 요구 사항에 따라 잠재적으로 성능을 저하시킬 수 있습니다.

대리인이 무엇인지 아십니까? C ++에서는 함수 포인터라고 합니다. 이 언어는 처음에는 습득하기가 어렵지만, 굉장히 좋아지고 싶다면 반드시 필요합니다.

C #은 쉽다 ... 매우 쉽다.


C # 대의원과 c 함수 포인터는 상당히 다릅니다. 델리게이트는 함수 포인터보다 C ++의 functor에 더 가깝습니다.
코드 InChaos

-2

나를 믿으십시오 .C ++에 대한 좋은 책을 고르십시오 (더 많은 것이 있고 검색 만하십시오). 배우기 시작하십시오 ...


1
BTW, C를 배우기 전에 (포인터, 배열, 구조체) 좋을 것입니다
Muhammad Hewedy

7
C ++보다 먼저 C를 배우면 석기 시대로 돌아갈 수 있습니다. 요즘에는 C ++에서 배열과 포인터를 거의 사용하지 않습니다. 언어는 오래 전에 그들에게서 멀어졌습니다.
fredoverflow

7
@ Muhammad : 다른 사람들은 속도, 안전, 유지 보수 용이성을 선호합니다.
DeadMG

3
@ DPD : Bjarne Stroustrup (언어의 발명가)을 포함한 많은 전문 C ++ 프로그래머는 동의하지 않습니다. 그의 최신 책은 처음부터 객체와 템플릿을 사용하는 것을 가르치고 있지만 배열과 포인터는 17 장 (500 페이지) 이전에는 전혀 다루지 않았습니다.
fredoverflow 2012 년

2
@DeadMG. 어쩌면 C-> C ++ 진화를 되돌릴 수는 없습니다. C ++의 C 부분을 싫어한다면 Java 또는 C #으로 이동하십시오. 개인적으로 C ++로 가기 전에 C에서 포인터와 배열에 집중하면 커리어에 큰 도움이된다는 것을 알았습니다. 물론, 당신은 그것들없이 전체 응용 프로그램을 코딩 할 수 있지만 다형성의 이점을 원한다면 포인터를 알아야합니다. 포인터없이 몇 가지 중요한 GoF 패턴을 구현할 수 있습니까? C를 공부할 때 "딱딱한"부분을 피한 친구들에게는 똑같지 않았습니다. 그들 대부분은 다형성을 이해하기가 어렵다는 것을 알았습니다.
DPD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.