"C++ liệu có biến mất trước sự phổ biến của .NET, C#, VB.NET ?
Hãy lấy ví dụ về những điểm mạnh của ngôn ngữ C++ với C#, VB.net
Sự khác biệt cú pháp C++ với C#.
Dự án nào thì nên phát triển trên C++?
Tại sao ở Việt nam, có ít lập trình viên muốn học và sử dụng C++?"
----
Chúc mừng hai thành viên mới sau đã có câu trả lời hay nhất cho câu hỏi của tuần.
1. Họ và tên: Nguyễn Văn Khiếu - Nguyễn Văn KhiếuĐịa chỉ nhận quà: lầu 3, 52 Đất Thánh, F6, Quận Tân Bình, Tp.HCMEmail: nvkhieu89@gmail.comMobile: 095 9449 2022. Họ và tên: Nguyễn Thị Ngọc Hà - ntnhaĐịa chỉ nhận quà: 51/11, Đường Lý Tự Trọng, Phường An Phú,Quận Ninh Kiều TPCTEmail: xitrum_chitchat@yahoo.comMobile: 01687942789
Chúng tôi sẽ liên hệ với hai bạn để gửi quà.
Cảm ơn các bạn đã nhiệt tình tham gia!
Họ tên: Trần Xuân Chiến
Chức danh:
Công ty:
Website: chienuit.spaces.live.com
Địa chỉ nhận quà: 20/56, Tổ 10, Khu phố 6, Linh Trung, Thủ Đức, Hồ Chí Minh
Email: chien.study@gmail.com
Mobile: 01692468154
---------------
Trả lời câu hỏi:
1. C++ sẽ còn phổ biến dù cho có sự phổ biến của .NET, C# và VB.NET
2. Điểm mạnh của C++: tốc độ, khả năng can thiệp vào phần cứng rất mạnh, cho phép lập trình viên có khả năng tùy biến code theo ý thích riêng của mình. Hiện nay số lượng lập trình viên sử dụng C++ vẫn có số lượng rất lớn
3. Khác biệt cú pháp C++ và C#:
-Trong C++, chúng ta có thể tạo một đối tượng một cách bình thường như khai báo biến, trong C# thì chúng ta bắt buộc phải dùng từ khóa new để tạo đối tượng. -Với xử lí ngoại lệ, C# cung cấp thêm từ khóa finally cho phép thực thi code bất kể có lỗi hay không.-Trong C#, nếu muốn sử dụng con trỏ thì chúng ta phải dùng từ khóa unsafe.-C# cung cấp cấu trúc foreach để lặp qua các phần tử một tập hợp.-Trong C#, chúng ta truyền tham số cho hàm theo kiểu tham chiếu bằng các từ khóa ref và out, trong C++ thì sử dụng con trỏ hoặc toán tử &.
4. Các dự án nên phát triển trên C++: các dự án làm việc sâu với phần cứng, yêu cầu cao về tốc độ và đồ họa. Đặc biệt là các dự án video game
5. Ở Việt Nam, có ít lập trình viên muốn sử dụng C++ vì cú pháp của C++ khá phức tạp (đặc biệt là các hàm API), bên cạnh đó, việc phát triển một phần mềm dùng C++ tốn thời gian nhiều hơn so với sử dụng C# hoặc VB.NET.
My power is my mind. I will never give up!!
http://chienuit.wordpress.com
Sau đây là phần trả lời câu hỏi
1. Đứng trước sự phổ biến của .Net, C#, VB.Net , mặt dù phổ biến xong trên thực tế với những thế mạnh riêng của mình C++ vẫn sẽ mãi tồn tại song song với C#, .Net, hay VB.Net. sự tồn tại này theo tôi không phải là sự cạnh tranh để duy trỳ cho từng lĩnh vực mà nó tồn tại song song thậm chí còn có thể hổ trợ nhau rất nhiều trong công việc lập trình. Xin nêu ra một vài lý do theo tôi mà .NET, C#, VB.NET thông dụng đơn giản vì nó cung cấp giao diện trực quan, thêm vào đó hổ trợ rất nhiều về các giai đoạn xây dựng thiết kế, nên nhiều người thích dùng vì tính tiện dụng, tuy nhiên để phát triển bền vững thì C++ sẽ là lựa chọn của các nhà lập trình viên chuyên nghiệp (theo tôi là thế)
2. Thế mạnh của C++ : có thể can thiệp sâu hơn về hệ thống, tương thích với các thiết bị phần cứng. do vậy nếu bạn cần viết một ứng dụng cần can thiệp sâu vào hệ thống thì C++ sẽ chiếm ưu thế hơn rất nhiều so với C#, .NEt, hay VB.NET
3. Một số khác biệt C++ và C#: (tham khảo từ tài liệu học của NIIT)
Thừa kế: Trong C++, class và struct hầu như giống nhau, ngược lại trong C#, chúng khá khác nhau. Lớp C# có thể hiện thực/thừa kế (implement) nhiều interface, nhưng chỉ được thừa kế từ chỉ 1 lớp cơ sở. Hơn nữa, struct C# không hỗ trợ thừa kế, và không hỗ trợ constructor mặc địnhMảng (Array): Trong C++ mảng chính là 1 con trỏ (pointer). Trong C#, mảng là đối tượng (object),có thuộc tính và phương thức. Ví dụ, số phần tử của mảng có thể lấy thông qua thuộc tính Length. Mảng C# còn kiểm tra chỉ số thứ tự khi truy xuất phần tử. Cú pháp khai báo mảng trong C# và C++ cũng khác: token "[] " theo sau khai báo kiểu của mảng chứ không phải đứng sau tên biến như trong C++Boolean: Trong C++, kiểu bool thực ra là số integer. Trong C#, không có sự tự chuyển đổi qua lại giữa bool và các kiểu khácKiểu số nguyên long: Trong C#, kiểu long có độ dài 64 bit, trong C++ là 32 bit.Kiểu số nguyên int: Trong C#, nó chắc chắn có độ dài 32 bit, trong VC++ là 32 bit, trong các trình biên dịch C++ khác, độ dài của nó có thể là 16 bit.Truyền tham số: Trong C++, mọi biến được truyền bằng trị, nếu không phải là con trỏ hoặc biến tham khảo. Trong C#, đối tượng (một thực thể của class) được truyền tham khảo (truyền tham biến), struct được truyền tham trị, nếu không khai báo "ref" hoặc "out"Phát biểu switch: Không giống C++, C# hỗ trợ việc nhảy từ nhãn này qua nhãn khác qua phát biểu gotoDelegate: Delegate C# giống như con trỏ hàm của C++, nhưng an toàn và bảo mật.Phương thức trong lớp cha: C# hỗ trợ từ khóa "base" cho việc gọi lại các phương thức của lớp cha. Hàm nạp chồng (overload) được khai báo 1 cách tường minh bằng từ khóa "override"Che khuất phương thức: Trong C++ phương thức trong lớp con chắc chắn che khuất phương thức trong lớp cha nếu chúng cùng prototype. Trong C#, bạn phải dùng từ khóa "new" trước phương thức hay thuộc tính bạn muốn che phủChỉ thị tiền biên dịch: C# chỉ cho đặt dẫn hướng tiền biên dịch (là các symbol) trong configuration của project, mà không có các file header (.h)Exception: C# cung cấp từ khóa "finally" cho đoạn code try {} catch để bắt Exception mà cần thêm những tác vụ bảo đảm an toànToán tử: C# hỗ trợ một số toán tử mở rộng như: "is", "typeof". Từ khóa "extern": Trong C++, "extern" dùng để khai báo kiểu/biến được định nghĩa trong file .obj khác. Trong C#, extern dùng để tạo ra một bí danh (alias) khi sử dụng version khác của 1 assembly.Từ khóa "static": Trong C++, static dùng trong khai báo phương thức/thuộc tính/biến trong class, hàm. Trong C#, chỉ dùng đối với các thành viên của class, không có trong hàmHàm main: Trong C# hàm Main (M viết hoa) luôn khai báo là staticCon trỏ: Được phép trong C#, nhưng chỉ trong mode unsafeSự khác nhau ở các toán tử.Chuỗi (string): Trong C++, string chỉ đơn giản là mảng ký tự. Trong C# string là 1 đối tượng (object) có hỗ trợ các phương thức tìm kiếmTừ khóa foreach: Trong C#, cho phép duyệt qua các phần tử của mảng hoặc tập hợpTầm vực Toàn cục: Trong C#, biến phương thức không có tầm vực toàn cục, chúng bắt buộc phải thuộc 1 class/struct nào đóBiến cục bộ: Trong C#, biến cục bộ có thể dùng trước khi khởi tạo giá trịQuản lý bộ nhớ: C++ không có cơ chế dọn rác, bộ nhớ không được trả lại hệ thống cho đến khi process kết thúc hoặc tự giải phóng bằng phát biểu delete/free. C# làm một cách tự độngHàm khởi tạo: Tương tự như C++, nếu bạn không viết hàm khởi tạo nào trong 1 lớp của C# thì 1 hàm khởi tạo mặc định tự động tạo ra (trong assembly) cho bạn. Hàm khởi tạo mặc định khởi tạo những giá trị mặc định cho các biến thành viênGiá trị mặc định cho tham số hàm/phương thức: C# không có, bạn phải dùng cách nạp chồng phương thức để thực hiệnKiểu generic: Khai báo như là một tham số của class hay method, tương tự như template trong C++Từ khóa "as": toán tử chuyển đổi kiểu, sẽ ném một exception nếu việc chuyển đổi không thực hiện được. Giống với static_cast trong C++, nhưng khác với dynamic_cast vì dynamic_cast không thực hiện kiểm tra sự tương thích kiểu nên không ném exception nào nếu như thực sự có lỗi
Xin nói thêm về C# từ wikipedia.org
interface
int[] a = new int[5]" thay vì "int a[5]
4. Như trên thì ta thấy những ứng dụng, những dự án mà các ứng dụng có tính tương tác cao, thâm nhập hệ thống nhiều, thì ta nên sử dụng C++ thay vì dùng C#... các ứng dụng lớn nên dùng C++ vì tính minh bạch rõ ràng trong code giúp hạn chế các lỗi có thể xảy ra...
5. Tại Việt Nam các bạn trẻ thường thích sự tiện nghi, nên họ thường thích lập trình trên C#, VB.NET, .NET đơn giản vì nó có giao diện thân thiện, hổ trợ nhiều, tương tác kéo thả... nên họ rất thích sự tiện nghi đó mà chọn các ngôn ngữ đó thay vì chọn C++. Tuy nhiên như trên đã nói, tính ưu việt của C++ là thấy rõ, và cần phải thay đổi quan điểm, hãy suy nghĩ đến các ứng dụng của ta, hướng đi của ta, mà chọn ngôn ngữ cho phù hợp, nếu muốn trở thành một lập trình viên thực thụ hãy nên chọn C++... điều đó không có nghĩa là bạn học c++ thì sẽ trở thành lập trình viên thực thụ mà để được điều đó bạn phải cố gắng rất nhiều...
Biệt danh: Khiếu Nobita, BunhiacopKhiếu
Khiếu Nguyễn
Gifted Student
Faculty of Mathematics and Computer Science
University of Science, HCM City
C++ liệu có biến mất trước sự phổ biến của .NET, C#, VB.NET ?
Điểm + duy nhất của C++ là nó được biên dịch trực tiếp thành mã máy, nếu C# có thế làm thế, thì chúng ta không cần đến C++ nữa.
Thậm chí nếu ta cho rằng, C++ cổ lỗ sĩ và là ngôn ngữ vô dụng thì vẫn còn hàng tỉ mã nguồn C++ bên ngoài đang hoạt động và làm công việc mà nó được thiết kế, được mua. Sẽ không thể nào có khả năng những mà nguồn này sẽ biến mất trong vòng vài chục năm tới. C++ sẽ vẫn cùng với chúng ta trong suốt sự nghiệp của mình và còn hơn thế nữa rất nhiều.
C++ là ngôn ngữ mà rất nhiều (nếu không là tất cả) trò chơi (games). Tôi đánh bạo cho rằng Halo được viết bằng C++, cùng với cực nhiều các game ngồn nhiều tài nguyên, nhiều khung hình/s. MS không có quyền để giết C++.
C++ là chuẩn ANSI, không phải sản phẩm của Microsoft hay bất kì công ty nào khác.
Vấn đề trở nên nhỏ đi khi thế giới managed UI đang ở giai đoạn chuyển dịch từ Winform sang WPF và ở khoảng trổng khá lớn đó thì C++/MFC lại lấp một cách hoàn hảo (mặc dù chỉ là khái niệm, vì công nghệ này lại không thể dùng được trong thế giới managed code.
Tất cả các sản phẩm mà chúng ta sử dụng, phần lớn, là được viết bằng C/C++. Từ Windows đến Visual Studio, từ Office đến Exchange, CLR, C#, VB, vv…C++ sẽ không biến mất. Nó sẽ chỉ tốt hơn. Không phải chúng tôi tạo ra công cụ mới nghĩa là chúng tôi bỏ cái cũ.Phần lớn các SDE ở Microsoft sử dụng phần lớn thời gian của họ viết C++. Điều này khó mà thay đổi sớm được.C++, dưới vai trò là công cụ, sẽ tiếp tục tiến hóa để phù hợp với thay đổi trong ngành công nghiệp
Điều này liệu có nghĩa C++ luôn luôn tồn tại mãi? Không, ngôn ngữ mới sẽ có một ngày thay thế ngôn ngữ cũ. Chí ít sẽ có người hy vọng sự xuất hiện của một mô hình mới trong lập trình có thể đáp ứng được thách thức trong tương lai.
Tốt nhất là C++ và C# không nên đối lập.
Vi vậy C# hay C++ là vấn đề cần phải cân nhắc trước khi lập trình. Lập trình hệ thống, cần can thiệp sâu vào cấu trúc bộ nhớ, cần những hàm UI cơ bản, cần tối ưu khả năng đồ họa của máy, hay cần lập trình ghép nối các thiết bị ngoại vi, hãy dùng C++. Nếu muốn thiết kế một phần mềm chạy trên mọi nền OS, anh cũng nên dùng C++. Tuy nhiên chúng ta phải chấp nhận việc code dài và những lỗi tràn bộ nhớ do không quản lý con trỏ một cách cẩn thận... Cần lập trình trên nền Windows, với lượng mã ít hơn, với hỗ trợ IDE ở mức độ ứng dụng không quá phức tạp, muốn dùng sẵn GDI+ với mức độ hỗ trợ ngày càng cao, muốn lập trình cơ sở dữ liệu một cách thuận tiện, hay ngại đụng đến con trỏ và Callback functions trong C++, hãy dùng C#.Vậy thế dùng cái gì cũng phải có sự tính toán.
- Với những ứng dụng cơ bản, thuật toán không cần nhiều đến việc sử dụng con trỏ ... tớ sẽ chọn C#, ngôn ngữ này đủ hay để giúp bạn hiểu ra nhiều điều về kĩ thuật lập trình hướng đối tượng, và đủ mạnh để hỗ trợ những thứ liên quan đến con trỏ một cách cơ bản nhất (LinkedList => Stack, Queue ... )- Với những ứng dụng đồ họa (tớ đã từng thử làm), ngôn ngữ C++ có vẻ mạnh mẽ hơn...
Về thế mạnh của Visual Basic.Net:
Visual Basic.NET trở thành ngôn ngữ lập trình hướng đối tượng chuyên dụng trên hệ điều hành Windows được ưa chuộng và phổ biến nhất hiện nay. Microsoft thiết kế lại Visual Basic.NET (VB.NET), hoàn toàn không kế thừa VB6 hay bổ sung, phát triển từ VB6 mà là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft 's .NET Framework. Nếu ta để ý tên của Visual Basic.NET (VB.NET), ta thấy ngay ngôn ngữ lập trình này chuyên trị tạo ứng dụng (application) dùng trong mạng, liên mạng hay trong Internet. Thật sự, đây là ngôn ngữ lập trình mới và rất lợi hại, không những lập nền tảng vững chắc theo kiểu mẫu đối tượng như các ngôn ngữ lập trình hùng mạnh khác đã vang danh C++, Java mà còn dễ học, dễ phát triển và còn tạo mọi cơ hội hoàn hảo để giúp ta giải đáp những vấn đề khúc mắc khi lập trình phát triển các loại ứng dụng phục vụ trong nhiều lĩnh vực Quản lý, Thương mại điện tử, Đồ họa và Viễn thông. 3 ưu điểm được xem là thế mạnh của Visual Basic.net là giao diện thân thiện, gọn nhẹ, bảo mật và chạy nhanh với bộ nhớ chiếm dụng tối ưu nhất.
Visual Basic.NET cho phép bạn cài đặt khái niệm hướng đối tượng như Overloading, Constructor và tham số hóa nhiều Constructor trong một Class. Visual Basic.NET cho phép bạn khai báo sử dụng lại những mã nguồn (Inheritance), thư viện hay tài nguyên đã có. Tính đa hình (Polymorphism) trong Visual Basic.NET được ghi nhận như một sự đột phá về mặt kỹ thuật, cho phép khai báo với đối tượng này nhưng sử dụng với đối tượng khác…
Tại sao ở Việt nam, có ít lập trình viên muốn học và sử dụng C++?
Mã viết bằng C# (tất nhiên do bản thân .Net nữa ) là rất dễ đọc, dễ hiểu, điều này khác hẳn với C/C++ khi cú pháp khá lằng ngoằng, rắc rối và dễ nhầm lẫn. Đây cũng là nguyên nhân quan trọng dẫn đến mọi người ưa chuộng C#, bên cạnh việc phải loay hoay với lỗi bộ nhớ, cấp phát động và những thứ khá low-level mà C/C++ đem lại.
Thực ra môi trường học tập ở các trường ĐH về CNTT và không khí chung về CNTT ở Việt Nam không nghiêng nhiều về lập trình C/C++. Những thứ bọn mình học chỉ là ứng dụng thuần túy của C/C++ trong việc cài đặt thuật toán, hay vài ba đề tài nhỏ. Chẳng có một ứng dụng nào đủ lớn cho ta tham gia để có thể thấy hết khả năng của C++ hay C#.
Như chúng ta đã biết, C# dựa trên một phần của C++ và một phần của cú pháp ngôn ngữ Java. Phần còn lại của cú pháp C# được tạo ra từ nhiều thứ, cho nó môt vài kiểu thiết kế. Điều này có thể chú ý rằng bạn có thể tạo ra lớp với C#. Hãy bắt đầu bằng việc tìm hiểu chúng ta tạo ra lớp và các thực thể từ một lớp với C++ và C#Phiên bản C++:#include <iostream>class MyClass{public: void doSomething(){std::cout << "This is some text";}};void main(){MyClass mc;mc.doSomething();}Phiên bản C#:using System;class MyClass{public void doSomething(){Console.WriteLine("This is some text");}}class EntryPoint{public static void Main(){MyClass mc = new MyClass();mc.doSomething();}}Có một vài sự khác nhau giữa hai đoạn mã nhỏ này. Đầu tiên, ví du C++ sử dụng chỉ thị #include để nhúng một cách vật lý nội dung của thư viện iostream.h. Đoạn mã C# chứa chỉ thị using thông báo với trình biên dịch C# rằng chúng ta muốn truy cập đến tất cả những namespace khác và các lớp chứa bên trong namespace System. Chỉ thị using không giống như chỉ thị #include: sử dụng chỉ thị using chỉ nói cho trình biên dịch C# tên của namespace chúng ta sử dụng và không nhúng vật lý bất kỳ file nào vào ứng dụng C#.Thứ hai, trong C#, hàm main bây giờ công bố là Main (chú ý chữ M hoa)Thứ ba, một công bố lớp C++ luôn có một dấu ";" sau dấu ngoặc nhọn cuối cùng. Trong C#, dấu ";" này thường được sử dụng để tách mã.Thứ tư, bạn sẽ chú ý rằng trong C#, chúng ta nối tuyệt đối truy cập xác định cho mỗi công bố phương thức và thành viên. Nếu chúng ta không làm thế, sau đó chúng được cho rằng là private giống như trong C++. Trong C#, có năm từ khóa chỉ định truy cập cho các thành viên và phương thức lớp sử dụngpublic: truy cập bởi bất kỳ lớp khacprivate: truy cập bởi lớp được công bốprotected: truy cập bởi lớp được công bố, cũng như bất kỳ lớp nào kế thừainternal: truy cập từ trong cùng một assembly (trong C#, một assembly là một gói dữ liệu quan hệ và tương tác với nhau chứa cùng mã và dữ liệu)protected internal: truy cập bởi lớp công bố, cũng như bất kỳ lớp nào kế thừa trong cùng một file nguồnCuối cùng, cũng giống như Java, các phương thức của C# có thể được công bố là static. Việc làm này là giống nhau trong từ khóa cho biến của C++ và C#. Trong C#, chúng ta có thể tạo và gọi phương thức static của lớpusing System;class MyClass{public static void doSomething(){Console.WriteLine("This is some text");}};class EntryPoint{public static void Main(){MyClass.doSomething();}}
Họ tên: Nguyễn Quang Huy
Chức danh: Team Leader
Công ty: AIT
Website: http://www.aitc.vn
Địa chỉ nhận quà: P204, CT4-5 Đô thị Yên Hòa, Phường Yên Hòa, Cầu Giấy, Hà Nội
Email: huynq@aitc.vn
Mobile: 0936785655
Câu trả lời của mình là tổng hợp các ý kiến của mấy bạn trên. Nếu không biết gì thì lên http://www.google.com.vn để search
PS : Như vậy có hợp lệ không nhỉ ? ^^
Họ và tên: Đỗ Bá Chiết
Công ty: Fpt software
Chức danh: Developer
Email: chietdb011@fsoft.com.vn
Mobile: 0983203668
Không ham phần thưởng nhưng cũng xin chia sẻ với mọi nguời.
"C++ liệu có biến mất trước sự phổ biến của .NET"
Câu trả lời là không,ít nhất là trong 5 năm tới, sau đó thì không rõ .Nếu thống kê các ngôn ngữ phổ biến nhất dùng thì : 70% là COBOL , 30 % còn lại thì 80% là C, C++ và chỉ có 20% là .NET ,JAVA và các ngôn ngữ khác.Các bạn lưu ý mảng lập trình rất rộng bao gồm tất cả các thiết bị có thể lập trình được, không chỉ riêng PC.
"Tại sao ở VN có ít lập trình viên sử dụng C++ :"
Thứ nhất là C++ học mất thời gian , người học C++ 6 tháng rồi có khi code vẫn còn lẫn, còn C# thì một sinh viên mới ra trường chỉ cần mất 7 ngày học là có thể code được .Ít nhất là dưới sự dẫn dắt của leader .
Vậy thì có nên học C++ không :
Rất nên học, lương của 1 C++ coder trung bình vẫn cao hơn lương của C# coder ,các kỹ năng hiếm hoi khác như : Delphi, ASM .. nếu đúng là senior bạn có thể kiếm 1000$ 1 tháng ngon lành .
"Dự án nào thì nên phát triển trên C++"
Thế mạnh của C++ là can thiệp sâu hệ thống và performance do vậy đa số các ứng dụng đòi hỏi yêu cầu trên thường viết trên C++ , .NET phát triển ứng dụng nhanh nhưng phải chạy trên NET FRAMEWORK hay CLR mà hiện nay tính tới phiên bản 4, NET CLR vẫn chỉ tung tăng trên user mode, chưa đi vào nhân Windows được, dễ thấy trong C# không có template nào của device driver .
Mình cũng góp vui một tí :)
HoanLe=> Câu khẳng định là không - ít ra trong tương lai gần. Lý do là C++ có những ưu điểm vượt trội hơn các ngôn ngữ như C#, VB.NET:
1. Hiệu năng xử lý: mã nguồn C++ được biên dịch ra mã máy mà không cần .NET Framework trên máy đó
2. Khả năng truy xuất phần cứng và hệ thống
3. Hỗ trợ làm việc với nhiều nền tảng khác nhau: C++ là một ngôn ngữ mang tính mở và được rất nhiều tổ chức sử dụng. Chúng ta có thể sử dụng kiến thức C++ (nói chung) để làm việc với những nền tảng khác không phải của Microsoft như OpenGL, OpenCL, lập trình trên Linux etc. Đây là điều C# & VB.NET chưa thể làm được.
HL=> Câu trả lời ở trên :)
1. Theo mình đánh giá, C++ đòi hỏi cú pháp chặt chẽ hơn C# rất nhiều
2. C++ đòi hỏi sử cẩn trọng trong việc quản lý bộ nhớ đối với các biến - vì không có GC để thu gom những object không còn được sử dụng
3. Cách khai báo biến và con trỏ hàm
4. Các cấu trúc try...catch và các mã lệnh cấu trúc khác
1. Các dự án yêu cầu hiệu năng xử lý cao
2. Các dự án cần can thiệp sâu vào hệ thống hoặc tương tác phần cứng
3. Các dự án đồ họa (vd: games)
Theo mình, có 2 lý do cơ bản là:
1. Sự phổ biến của C++ và tính đặc thù của nó: xu hướng phát triển phần mềm hiện nay là rapid development. Chính vì vậy, triển khai các dự án không yêu cầu như phần trả lời trên sẽ mang tính kinh tế cao hơn rất nhiều khi xây dựng trên C# hoặc VB.NET. Mà hầu hết các dự án hiện nay đều như vậy :). Điều này rất đến, tìm việc lập trình với C# hay VB.NET sẽ dễ dàng hơn rất nhiều.
2. Sự phức tạp của C++: như mình đã đề cập đến ở trên, làm việc với C++ có rất nhiều ràng buộc - không chỉ trong cú pháp mà còn một đống API cần phải thuộc. Điều này làm cho C++ trở thành một ngôn ngữ rất khó để master.
Tất cả các sản phẩm mà chúng ta sử dụng, phần lớn, là được viết bằng C/C++. Từ Windows đến Visual Studio, từ Office đến Exchange, CLR, C#, VB, vv…C++ sẽ không biến mất.
- Hãy lấy ví dụ về những điểm mạnh của ngôn ngữ C++ với C#, VB.net
Trên nền Win32 thì VB phát triển ứng dụng thông thường nhanh hơn, nhưng C++ thì có khả năng can thiệp hệ thống tốt hơn và thường chạy nhanh hơn do khả năng tối ưu hóa tốt. Do vậy ứng dụng văn phòng phần nhiều viết bằng VB, còn các game cần tốc độ tối ưu thì lại viết bằng C++.VB thì dễ học hơn C++, để có thể lập trình được VC++ bạn nên bắt đầu từ C -> C++ -> C For Win32 (có thể đốt giai đọan này) -> Visual C++ (MFC). Còn VB thì có thể học ngay.Nhưng nhìn chung ứng dụng của C vẫn rất rộng, rất nhiều ngôn ngữ mở rộng hay sử dụng syntax từ C, ví dụ : Javascript, perl, php, Java, C# ... Còn VB thì chỉ có VB, VBScript và VBA(theo tui được biết). Ở mức lập trình ứng dụng văn phòng thì VB áp đảo, muốn phát triển các macro hay ứng dụng Access, bạn phải viết bằng VBA.
- Sự khác biệt cú pháp C++ với C#.
Thừa kế: Trong C++, class và struct hầu như giống nhau, ngược lại trong C#, chúng khá khác nhau. Lớp C# có thể hiện thực/thừa kế (implement) nhiều interface, nhưng chỉ được thừa kế từ chỉ 1 lớp cơ sở. Hơn nữa, struct C# không hỗ trợ thừa kế, và không hỗ trợ constructor mặc địnhMảng (Array): Trong C++ mảng chính là 1 con trỏ (pointer). Trong C#, mảng là đối tượng (object),có thuộc tính và phương thức. Ví dụ, số phần tử của mảng có thể lấy thông qua thuộc tính Length. Mảng C# còn kiểm tra chỉ số thứ tự khi truy xuất phần tử. Cú pháp khai báo mảng trong C# và C++ cũng khác: token "[] " theo sau khai báo kiểu của mảng chứ không phải đứng sau tên biến như trong C++Boolean: Trong C++, kiểu bool thực ra là số integer. Trong C#, không có sự tự chuyển đổi qua lại giữa bool và các kiểu khácKiểu số nguyên long: Trong C#, kiểu long có độ dài 64 bit, trong C++ là 32 bit.Kiểu số nguyên int: Trong C#, nó chắc chắn có độ dài 32 bit, trong VC++ là 32 bit, trong các trình biên dịch C++ khác, độ dài của nó có thể là 16 bit.Truyền tham số: Trong C++, mọi biến được truyền bằng trị, nếu không phải là con trỏ hoặc biến tham khảo. Trong C#, đối tượng (một thực thể của class) được truyền tham khảo (truyền tham biến), struct được truyền tham trị, nếu không khai báo "ref" hoặc "out"Phát biểu switch: Không giống C++, C# hỗ trợ việc nhảy từ nhãn này qua nhãn khác qua phát biểu gotoDelegate: Delegate C# giống như con trỏ hàm của C++, nhưng an toàn và bảo mật.Phương thức trong lớp cha: C# hỗ trợ từ khóa "base" cho việc gọi lại các phương thức của lớp cha. Hàm nạp chồng (overload) được khai báo 1 cách tường minh bằng từ khóa "override"Che khuất phương thức: Trong C++ phương thức trong lớp con chắc chắn che khuất phương thức trong lớp cha nếu chúng cùng prototype. Trong C#, bạn phải dùng từ khóa "new" trước phương thức hay thuộc tính bạn muốn che phủChỉ thị tiền biên dịch: C# chỉ cho đặt dẫn hướng tiền biên dịch (là các symbol) trong configuration của project, mà không có các file header (.h)Exception: C# cung cấp từ khóa "finally" cho đoạn code try {} catch để bắt Exception mà cần thêm những tác vụ bảo đảm an toànToán tử: C# hỗ trợ một số toán tử mở rộng như: "is", "typeof". Từ khóa "extern": Trong C++, "extern" dùng để khai báo kiểu/biến được định nghĩa trong file .obj khác. Trong C#, extern dùng để tạo ra một bí danh (alias) khi sử dụng version khác của 1 assembly.Từ khóa "static": Trong C++, static dùng trong khai báo phương thức/thuộc tính/biến trong class, hàm. Trong C#, chỉ dùng đối với các thành viên của class, không có trong hàmHàm main: Trong C# hàm Main (M viết hoa) luôn khai báo là staticCon trỏ: Được phép trong C#, nhưng chỉ trong mode unsafeSự khác nhau ở các toán tử.Chuỗi (string): Trong C++, string chỉ đơn giản là mảng ký tự. Trong C# string là 1 đối tượng (object) có hỗ trợ các phương thức tìm kiếmTừ khóa foreach: Trong C#, cho phép duyệt qua các phần tử của mảng hoặc tập hợpTầm vực Toàn cục: Trong C#, biến phương thức không có tầm vực toàn cục, chúng bắt buộc phải thuộc 1 class/struct nào đóBiến cục bộ: Trong C#, biến cục bộ có thể dùng trước khi khởi tạo giá trịQuản lý bộ nhớ: C++ không có cơ chế dọn rác, bộ nhớ không được trả lại hệ thống cho đến khi process kết thúc hoặc tự giải phóng bằng phát biểu delete/free. C# làm một cách tự độngHàm khởi tạo: Tương tự như C++, nếu bạn không viết hàm khởi tạo nào trong 1 lớp của C# thì 1 hàm khởi tạo mặc định tự động tạo ra (trong assembly) cho bạn. Hàm khởi tạo mặc định khởi tạo những giá trị mặc định cho các biến thành viênGiá trị mặc định cho tham số hàm/phương thức: C# không có, bạn phải dùng cách nạp chồng phương thức để thực hiệnKiểu generic: Khai báo như là một tham số của class hay method, tương tự như template trong C++Từ khóa "as": toán tử chuyển đổi kiểu, sẽ ném một exception nếu việc chuyển đổi không thực hiện được. Giống với static_cast trong C++, nhưng khác với dynamic_cast vì dynamic_cast không thực hiện kiểm tra sự tương thích kiểu nên không ném exception nào nếu như thực sự có lỗi.
- Dự án nào thì nên phát triển trên C++?
Các dự án về Game.
- Tại sao ở Việt nam, có ít lập trình viên muốn học và sử dụng C++?
Chủ yếu là do lương của laaip trình viên Java và .Net cao hơn !
Normal 0 false false false MicrosoftInternetExplorer4
1.C++ liệu có biến mất trước sự phổ biến của .NET, C#, VB.NET ?
C++ (đọc là "C cộng cộng" hay "xi-plus-plus", IPA: /siː pləs pləs/) là một loại ngôn ngữ lập trình. Đây là một dạng ngôn ngữ đa mẫu hình tự do có kiểu tĩnh và hỗ trợ lập trình thủ tục, dữ liệu trừu trượng, lập trình hướng đối tượng, và lập trình đa hình. Từ thập niên 1990, C++ đã trở thành một trong những ngôn ngữ thương mại phổ biến nhất.C++ tiếp tục phát triển để thỏa mản các nhu cầu tương lai.
Tất cả các sản phẩm mà chúng ta sử dụng, phần lớn, là được viết bằng C/C++. Từ Windows đến Visual Studio, từ Office đến Exchange, CLR, C#, VB, vv… C++ sẽ không biến mất. Nó sẽ chỉ tốt hơn. Không phải chúng ta tạo ra công cụ mới nghĩa là chúng ta bỏ cái cũ. Phần lớn các SDE ở Microsoft sử dụng phần lớn thời gian của họ viết C++. Điều này khó mà thay đổi sớm được.C++, dưới vai trò là công cụ, sẽ tiếp tục tiến hóa để phù hợp với thay đổi trong ngành công nghiệp
2.Hãy lấy ví dụ về những điểm mạnh của ngôn ngữ C++ với C#, VB.net
Hiệu năng xử lý: mã nguồn C++ được biên dịch ra mã máy mà không cần .NET Framework trên máy đó.trong khi đó NET phát triển ứng dụng nhanh nhưng phải chạy trên NET FRAMEWORK hay CLR mà hiện nay tính tới phiên bản 4, NET CLR vẫn chỉ tung tăng trên user mode, chưa đi vào nhân Windows được.
có thể can thiệp sâu hơn về hệ thống, tương thích với các thiết bị phần cứng. do vậy nếu bạn cần viết một ứng dụng cần can thiệp sâu vào hệ thống thì C++ sẽ chiếm ưu thế hơn rất nhiều so với C#, .NEt, hay VB.NET.cho phép lập trình viên có khả năng tùy biến code theo ý thích riêng của mình
Hỗ trợ làm việc với nhiều nền tảng khác nhau: C++ là một ngôn ngữ mang tính mở và được rất nhiều tổ chức sử dụng. Chúng ta có thể sử dụng kiến thức C++ (nói chung) để làm việc với những nền tảng khác không phải của Microsoft như OpenGL, OpenCL, lập trình trên Linux etc. Đây là điều C# & VB.NET chưa thể làm được.
3.Sự khác biệt cú pháp C++ với C#:
C++ đòi hỏi sử cẩn trọng trong việc quản lý bộ nhớ đối với các biến - vì không có GC để thu gom những object không còn được sử dụng.C++ đòi hỏi cú pháp chặt chẽ hơn C# rất nhiều
Trong C++, class và struct hầu như giống nhau, ngược lại trong C#, chúng khá khác nhau. Lớp C# có thể hiện thực/thừa kế (implement) nhiều interface, nhưng chỉ được thừa kế từ chỉ 1 lớp cơ sở. Hơn nữa, struct C# không hỗ trợ thừa kế, và không hỗ trợ constructor mặc định Mảng (Array): Trong C++ mảng chính là 1 con trỏ (pointer). Trong C#, mảng là đối tượng (object),có thuộc tính và phương thức. Ví dụ, số phần tử của mảng có thể lấy thông qua thuộc tính Length. Mảng C# còn kiểm tra chỉ số thứ tự khi truy xuất phần tử. Cú pháp khai báo mảng trong C# và C++ cũng khác: token "[] " theo sau khai báo kiểu của mảng chứ không phải đứng sau tên biến như trong C++ Boolean: Trong C++, kiểu bool thực ra là số integer. Trong C#, không có sự tự chuyển đổi qua lại giữa bool và các kiểu khác Kiểu số nguyên long: Trong C#, kiểu long có độ dài 64 bit, trong C++ là 32 bit. Kiểu số nguyên int: Trong C#, nó chắc chắn có độ dài 32 bit, trong VC++ là 32 bit, trong các trình biên dịch C++ khác, độ dài của nó có thể là 16 bit. Truyền tham số: Trong C++, mọi biến được truyền bằng trị, nếu không phải là con trỏ hoặc biến tham khảo. Trong C#, đối tượng (một thực thể của class) được truyền tham khảo (truyền tham biến), struct được truyền tham trị, nếu không khai báo "ref" hoặc "out" Phát biểu switch: Không giống C++, C# hỗ trợ việc nhảy từ nhãn này qua nhãn khác qua phát biểu goto Delegate: Delegate C# giống như con trỏ hàm của C++, nhưng an toàn và bảo mật. Phương thức trong lớp cha: C# hỗ trợ từ khóa "base" cho việc gọi lại các phương thức của lớp cha. Hàm nạp chồng (overload) được khai báo 1 cách tường minh bằng từ khóa "override" Che khuất phương thức: Trong C++ phương thức trong lớp con chắc chắn che khuất phương thức trong lớp cha nếu chúng cùng prototype. Trong C#, bạn phải dùng từ khóa "new" trước phương thức hay thuộc tính bạn muốn che phủ Chỉ thị tiền biên dịch: C# chỉ cho đặt dẫn hướng tiền biên dịch (là các symbol) trong configuration của project, mà không có các file header (.h) Exception: C# cung cấp từ khóa "finally" cho đoạn code try {} catch để bắt Exception mà cần thêm những tác vụ bảo đảm an toàn Toán tử: C# hỗ trợ một số toán tử mở rộng như: "is", "typeof". Từ khóa "extern": Trong C++, "extern" dùng để khai báo kiểu/biến được định nghĩa trong file .obj khác. Trong C#, extern dùng để tạo ra một bí danh (alias) khi sử dụng version khác của 1 assembly. Từ khóa "static": Trong C++, static dùng trong khai báo phương thức/thuộc tính/biến trong class, hàm. Trong C#, chỉ dùng đối với các thành viên của class, không có trong hàm Hàm main: Trong C# hàm Main (M viết hoa) luôn khai báo là static Con trỏ: Được phép trong C#, nhưng chỉ trong mode unsafe Sự khác nhau ở các toán tử. Chuỗi (string): Trong C++, string chỉ đơn giản là mảng ký tự. Trong C# string là 1 đối tượng (object) có hỗ trợ các phương thức tìm kiếm Từ khóa foreach: Trong C#, cho phép duyệt qua các phần tử của mảng hoặc tập hợp Tầm vực Toàn cục: Trong C#, biến phương thức không có tầm vực toàn cục, chúng bắt buộc phải thuộc 1 class/struct nào đó Biến cục bộ: Trong C#, biến cục bộ có thể dùng trước khi khởi tạo giá trị Quản lý bộ nhớ: C++ không có cơ chế dọn rác, bộ nhớ không được trả lại hệ thống cho đến khi process kết thúc hoặc tự giải phóng bằng phát biểu delete/free. C# làm một cách tự động Hàm khởi tạo: Tương tự như C++, nếu bạn không viết hàm khởi tạo nào trong 1 lớp của C# thì 1 hàm khởi tạo mặc định tự động tạo ra (trong assembly) cho bạn. Hàm khởi tạo mặc định khởi tạo những giá trị mặc định cho các biến thành viên Giá trị mặc định cho tham số hàm/phương thức: C# không có, bạn phải dùng cách nạp chồng phương thức để thực hiện Kiểu generic: Khai báo như là một tham số của class hay method, tương tự như template trong C++ Từ khóa "as": toán tử chuyển đổi kiểu, sẽ ném một exception nếu việc chuyển đổi không thực hiện được. Giống với static_cast trong C++, nhưng khác với dynamic_cast vì dynamic_cast không thực hiện kiểm tra sự tương thích kiểu nên không ném exception nào nếu như thực sự có lỗi.
Serie các ngôn ngữ "C" là một ví dụ tuyệt với về tiến trình thiết kế hướng đối tượng phát triển theo thời gian. C++ cung cấp cho các nhà phát triển với một sự bổ sung thông minh về lập trình hướng đối tượng, cho phép họ tạo ra các contructor, sao chép các contructor, override các toán tử, sử dụng template một cách tuyệt đối. Vấn đề chính với một ngôn ngữ phức tạp như C++ là phải mất nhiều tháng mới có thể thật sự làm chủ thiết kế hướng đối tượng của nó, với mỗi lập trình viên mới phải đi sau vào những rắc rối với các template, overload các hàm và dĩ nhiên việc tạo lớp và sử dụng chúng. Với sự bổ sung của C# (đọc là C-Sharp), MS đưa ra hướng đi mới cho những đặc điểm hướng đối tượng là những thành phần cơ bản của C++ như template, và cũng thay đổi cách chúng ta tạo ra các lớp
4.Dự án nào thì nên phát triển trên C++?
Thế mạnh của C++ là can thiệp sâu hệ thống và performance do vậy đa số các ứng dụng đòi hỏi yêu cầu trên thường viết trên C++,Các dự án yêu cầu hiệu năng xử lý cao,Các dự án cần can thiệp sâu vào hệ thống hoặc tương tác phần cứn,yêu cầu cao về tốc độ và đồ họa. Đặc biệt là các dự án video game
5.Tại sao ở Việt nam, có ít lập trình viên muốn học và sử dụng C++?
Xu hướng phát triển phần mềm hiện nay là rapid development. Chính vì vậy, triển khai các dự án không yêu cầu như phần trả lời trên sẽ mang tính kinh tế cao hơn rất nhiều khi xây dựng trên C# hoặc VB.NET. Điều này rất đến, tìm việc lập trình với C# hay VB.NET sẽ dễ dàng hơn rất nhiều. C++ vì cú pháp của C++ khá phức tạp (đặc biệt là các hàm API), bên cạnh đó, việc phát triển một phần mềm dùng C++ tốn thời gian nhiều hơn so với sử dụng C# hoặc VB.NET( C++ học mất thời gian trong khi học c# lại rất nhanh ^^).C++ có rất nhiều ràng buộc - không chỉ trong cú pháp mà còn một đống API cần phải thuộc. Điều này làm cho C++ trở thành một ngôn ngữ rất khó để theo kịp xu thế.
P/S : hì,cuối cùng thì cũng làm xong,học thêm được kha khá kiến thức rồi.
@Trương Thế BìnhBạn này hay nhỉ??? Bạn copy các bài trên của những bạn trước, sau đó ghép nối thành bài trả lời của mình!!!
xin trích dẫn "Net, C#, VB.Net mặc dù phổ biến xong trên thực tế với những thế mạnh riêng của mình C++ vẫn sẽ mãi tồn tại song song với C#, .Net, hay VB.Net."
cái này bạn copy từ tôi, nhưng thiếu mất dấu chấm ở chổ Net đầu tiên! phải là .net bạn ạh!!!
tiếp theo câu " C++ sẽ vẫn cùng với chúng ta trong suốt sự nghiệp của mình và còn hơn thế nữa rất nhiều." thì bạn copy từ bạn Hà
Các phần tiếp theo thì... xem sẽ rõ thôi mà.
Mà khi copy thì nên để nguồn chứ nhỉ! hì hì hì. Dẫu sao bạn cũng rất thông minh kết hợp nhiều ý từ mỗi bài trước mình!.
Em kiến thức có hạn,nhưng tinh thần học hỏi thì luôn luôn có và sẵn sàng học hỏi những gì chưa biết,bài viết trên là toàn bộ những gì em biết và học hỏi được,nhưng với bài làm đó em đã phải chăm chú tìm tòi mất 2 ngày rồi mới có được 1 bài viết như thế đó.qua lần này thì em đã học được thêm nhiều kiến thức bổ ích,kích chúc 4rum ngày càng có nhiều cuộc thi bổ ích như thế này,chúc 4rum ngày càng phát triển
Xin chúc mừng và cảm ơn các bạn đã tham gia. Các bài viết của các bạn rất hay !