Sẽ ra sao nếu kết hợp C và C++ trong cùng 1 dự án?

Em chào các anh chị .
Em là sinh viên năm nhất ngành CNTT . Em đã theo đuổi và học sơ qua C++ từ cấp 3 .Nhưng khi vào trường đại học thì trường em dạy ngôn ngữ C . Em vẫn quyết tâm học C++ dù trong lớp 95% là học C.

  • Anh chị đi trước có thể cho em không biết xuyên suốt 4 năm học trường vẫn duy trì học C hay sẽ đổi qua C++ ạ ?
  • Em có nên đổi lại học C để giống với các bạn không ạ ? .Vì em sợ khi làm bài tập lớn em code C++ sẽ làm bài tập xấu hơn và sợ trường không đồng ý .

Em tạo topic này chỉ muốn tham khảo ý kiến của các anh chị đi trước ạ.Em không có ý định gây war hay thể hiên điều gì đâu ạ.
Em cảm ơn mọi người.

Thực ra C ++ là bản nâng cấp của C thêm khả năng hướng đối tượng " nửa mùa"
Cú pháp chương trình hướng hàm mình nhớ k nhầm thì y nguyên chỉ khác mỗi lệnh nhập , xuất
Nếu code k có hướng đối tượng mà chỉ hướng hàm thì code C vs C++ gần giống y xì nhau

3 Likes

Không có chuyện 4 năm học không gì ngoài C, cái này bạn cần tìm hiểu kĩ chương trình học.

C chỉ là ngôn ngữ hướng thủ tục thôi, không có closure hay lambda.

4 Likes

bác nói thêm về cái “nửa mùa” được không? Như thế nào mới là không nửa mùa?

1 Like

C++ = C with classes là một nhận định rất sai lầm.

3 Likes

Tức là nó không có chức năng đó, nhưng bằng khả năng và áp dụng mọi mưu mô thủ đoạn :laughing: để cho nó có một cái gì nhìn nó giống như thế.
Tất nhiên hàng fake thì không được như hàng real nên gọi là nửa mùa.

6 Likes

nửa mùa có lẽ là nó ko tuân theo quy tắc OOP 100% như Java hay C#. 1 class trong Java/C# được tạo ra là để xài đa hình, có sẵn interface. 1 class/struct trong C++ được tạo ra ko phải chỉ để xài đa hình, ko có interface trong C++ (có thể giả lập bằng cách khác). Nguyên tắc của C++ là “only pay for what you need”, mà đa hình ko phải là thứ mà C++ cần mọi lúc mọi nơi nên đa hình phải được “bật” bằng tay bằng cách thêm keyword virtual chứ ko phải tự động có như Java/C# :V

à ngoài ra đa hình trong C++ có thể ko cần virtual vẫn làm đúng được. Ví dụ

Base* p = new Derived1;
delete p;
Base* q = new Derived2;
delete q;

thì class Base phải phải có virtual destructor virtual ~Base() {} thì delete p mới gọi đúng ~Derived1()delete q mới gọi đúng ~Derived2() được, nếu ko có virtual cho dtor thì delete pdelete q đều gọi tới ~Base() là ko đúng :V Nhưng ko phải lúc nào cũng cần, ví dụ khác:

Derived1 d1;
Derived2 d2;
Base* p = &d1;
Base& q = d2;

thì ở đây hoàn toàn ko cần virtual dtor vẫn xài đa hình được :V Vì nguyên tắc của C++ là “pay only what you need” nên OOP trong C++ ko bật sẵn virtual như Java/C#, nên có lẽ mới gọi OOP trong C++ là nửa vời :V

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?