‫Vì vậy, chúng tôi biết rằng chúng tôi cần một số thành phần trên lớp cơ sở của chúng tôi.
‫Chúng tôi biết rằng chúng tôi cần một tấm lưới cơ sở cho phần dưới cùng của xe tăng và tháp pháo.
‫Chúng tôi cũng cần một lưới tháp pháo cho phần trên cùng.
‫Chúng ta cần một viên đạn để xử lý va chạm và chúng ta cần một điểm phóng đạn.
‫Đó sẽ là một thành phần cảnh.
‫Bây giờ, khi chúng ta đã thêm những thứ này vào lớp pod cơ sở, thì bất cứ thứ gì chúng ta tạo dựa trên
‫lớp này sẽ kế thừa những thứ đó.
‫Vì vậy, chúng tôi có thể tạo một chiếc xe tăng dựa trên nền tảng - và sau đó chúng tôi có thể tạo ra một chiếc tháp cũng dựa trên nền
‫tảng -.
‫Và bởi vì chúng dựa trên nhóm cơ sở, chúng kế thừa các thành phần này.
‫Xe tăng có thể có lưới cơ sở riêng, lưới tháp pháo riêng, viên đạn riêng và điểm xuất hiện đạn
‫riêng.
‫Và tương tự như vậy, tháp sẽ nhận được thành phần viên nang lưới tháp pháo cơ sở của riêng nó và điểm xuất hiện đạn
‫cũng như vậy.
‫Và chúng ta sẽ thấy rất sớm cách chúng ta có thể gán các mắt lưới khác nhau cho từng mắt lưới này để chúng trông khác nhau.
‫Vì vậy, chúng tôi biết rằng chúng tôi cần một số thành phần.
‫Bây giờ đã đến lúc thực sự thêm một số thành phần vào lớp cơ sở của chúng ta.
‫Bây giờ, theo mặc định, chúng tôi đã có một phần công khai, một phần được bảo vệ và phần công khai thứ hai
‫ở dưới đây.
‫Có nhiều lý do khác nhau để có nhiều phần công khai và chúng ta sẽ nói về những lý do đó sau.
‫Nhưng đối với các thành phần của chúng ta, chúng ta sẽ tạo một phần riêng tư.
‫Như bạn đã học trước đây, rất tốt nếu các biến thành viên ở chế độ riêng tư, vì vậy chúng chỉ có
‫thể truy cập được từ bên trong lớp sở hữu chúng.
‫Vì vậy, chúng tôi cần một số thành phần.
‫Cái đầu tiên tôi sẽ thêm vào là viên nang.
‫Vì vậy, hãy tạo một biến loại thành phần viên nang của bạn.
‫Bây giờ đây sẽ là một con trỏ.
‫Chúng ta sẽ sử dụng con trỏ cho phần lớn các biến của mình miễn là chúng không phải là kiểu cơ sở
‫như số nguyên hoặc số float.
‫Và như bạn đã biết, đó là bởi vì con trỏ nhẹ, chúng chỉ là địa chỉ và chúng cho phép chúng ta
‫hoạt động hiệu quả hơn.
‫Vì vậy, chúng tôi có con trỏ thành phần viên nang chữ U này và chúng tôi sẽ gọi nó là chữ viết tắt của thành phần viên
‫nang này.
‫Bây giờ, ngay trên thành phần con nhộng, chúng ta sẽ thêm một macro cụ thể cho động cơ không có thật và nó là thuộc tính của bạn được viết
‫hoa tất cả với dấu ngoặc đơn của riêng nó.
‫Thuộc tính của bạn là một cách để làm cho động cơ không thực nhận biết được biến này để nó có thể tham gia vào các động cơ không
‫thực.
‫Hệ thống Phản ánh.
‫Hệ thống phản chiếu cho phép chúng ta làm những việc như đưa biến này vào bản thiết kế và tham gia vào việc
‫thu gom rác và những thứ tương tự.
‫Vì vậy, việc thêm thuộc tính you sẽ là thứ sẽ thêm vào các thành phần của chúng ta khi chúng ta tạo chúng.
‫Vì vậy, chúng tôi có thành phần viên nang này và bởi vì chúng tôi đang sử dụng loại thành phần viên nang YOU,
‫chúng tôi cần cho trình biên dịch biết về loại này.
‫Theo mặc định, nó không biết thành phần viên nang là gì.
‫Bây giờ thông thường để cho trình biên dịch biết thành phần viên nén là gì, chúng tôi sẽ bao gồm một tệp tiêu đề ở trên cùng với
‫các chỉ thị bao gồm của chúng tôi nếu chúng tôi truy cập tài liệu công cụ không có thật và tìm
‫kiếm thành phần viên nén, chúng tôi có thể thấy ngay tại đây nơi nó cho biết bao gồm tệp tiêu đề mà chúng
‫tôi cần đưa vào để thông báo cho trình biên dịch về thành phần viên nén.
‫Bây giờ chúng tôi có thể bao gồm điều này ngay tại đây ở trên cùng và sau đó là U của chúng tôi.
‫Loại thành phần Capsule sẽ được trình biên dịch nhận dạng và mọi thứ sẽ được xử lý theo kiểu dory.
‫Nhưng nói chung, thực hành tốt khi viết mã những thứ này là cố gắng giữ cho tệp tiêu đề
‫này càng nhỏ càng tốt.
‫Bất cứ khi nào chúng tôi đưa tệp tiêu đề vào tệp này, một chương trình được gọi là bộ xử lý tiền xử lý sẽ lấy
‫tất cả nội dung của tệp tiêu đề đó, loại bỏ một số thứ như nhận xét và sau đó dán
‫tất cả nội dung của tệp tiêu đề đó vào tệp này.
‫Kết quả là tệp này trở nên lớn hơn vì nó có nội dung của tệp bao gồm đó dán nó
‫vào đây.
‫Chúng tôi chỉ muốn bao gồm những thứ khi chúng tôi sử dụng chúng.
‫Vì vậy, làm thế nào để chúng ta loại bỏ việc không bao gồm tệp tiêu đề ở đây trong tiêu đề cơ sở?
‫Chà, chúng ta có thể sử dụng một thứ gì đó trong C ++ được gọi là khai báo chuyển tiếp.
‫Chúng tôi chuyển tiếp khai báo loại thành phần viên nang u này bằng cách sử dụng từ khóa lớp như thế này.
‫Lưu ý rằng trình biên dịch hiện hiển thị kiểu này là màu xanh lục bất cứ khi nào chúng ta chuyển tiếp khai báo một biến sau đó có thể
‫loại bỏ việc không bao gồm tệp tiêu đề của nó.
‫Nó nói với trình biên dịch rằng đây là một kiểu, vì vậy nó sẽ không cung cấp cho chúng tôi lỗi IntelliSense nữa, nói
‫rằng nó không nhận ra đây là một kiểu.
‫Bây giờ đây là một loại không hoàn chỉnh.
‫Nếu chúng tôi thực sự cố gắng sử dụng kiểu này bằng cách truy cập các thành viên như hàm và biến hoặc cố gắng xây
‫dựng một đối tượng kiểu này, chúng ta sẽ gặp lỗi vì đó là kiểu không hoàn chỉnh.
‫Chúng tôi sẽ cần tệp tiêu đề được bao gồm ở bất kỳ nơi nào chúng tôi sử dụng kiểu này để thực hiện những điều đó để chúng tôi có thể
‫chuyển tiếp khai báo một con trỏ của một loại để tránh cần tệp tiêu đề.
‫Nhưng điều quan trọng cần lưu ý là chúng ta cần các tệp tiêu đề để kế thừa từ các lớp cụ thể.
‫Lưu ý rằng lớp này kế thừa từ một ao và tệp tiêu đề ao được bao gồm ở đây ở trên cùng.
‫Vì vậy, kế thừa yêu cầu tệp tiêu đề cho loại mà chúng tôi đang kế thừa.
‫Vì vậy, chúng ta hãy thảo luận về khai báo chuyển tiếp và tại sao chúng ta muốn làm điều đó.
‫Giả sử chúng ta có một lớp gọi là Base Pon cần phải có một biến con trỏ thuộc loại thành phần viên nang
‫của bạn.
‫Bây giờ, thành phần viên con nhộng nằm trong tệp tiêu đề thành phần viên con nhộng.
‫Bây giờ chúng ta thực sự sẽ sử dụng kiểu này dựa trên khi chúng ta xây dựng một đối tượng của U.
‫Loại thành phần viên nang.
‫Vì vậy, dựa trên tất cả những gì chúng ta thực sự cần là có một con trỏ của thành phần viên nang loại U.
‫Bây giờ sự thật là dựa trên H thực sự không cần các chi tiết triển khai của lớp thành phần
‫viên nang.
‫Nói cách khác, nó không cần biết các hàm được định nghĩa như thế nào hoặc thậm chí là lớp thành phần viên nang
‫lớn như thế nào.
‫Một con trỏ thành phần viên nang có cùng kích thước với bất kỳ con trỏ nào khác.
‫Nó chỉ là một địa chỉ.
‫Bây giờ trong lớp kế hoạch cơ sở.
‫Chúng tôi muốn xây dựng thành phần viên nang.
‫Vì lý do này, chúng ta cần biết kích thước của một thành phần viên nang để bố trí bộ nhớ cần thiết cho
‫việc tạo đối tượng này.
‫Vì vậy, mặc dù tiêu đề thành phần viên nang không hoàn toàn cần thiết trong Ponca cơ sở, nhưng nó hoàn toàn cần thiết trong cơ
‫sở.
‫Porkpie Vì vậy, phương pháp lập trình tốt là chỉ bao gồm các tiêu đề mà bạn thực sự cần chúng để chúng ta có thể khai báo con trỏ
‫của con trỏ thành phần viên nang loại U trong sản phẩm cơ sở H và sau đó bao gồm các thành phần viên nang
‫mà chúng tôi cần chi tiết triển khai vì chúng tôi đang xây dựng một thành phần viên nang và chúng ta cần
‫biết kích thước của a.
‫Thành phần viên nang trong bộ nhớ.
‫Bây giờ chúng ta hãy thảo luận về hậu quả của việc đưa tệp tiêu đề vào FX cơ sở thay thế.
‫Như chúng ta đã thấy, chúng ta hoàn toàn có thể làm được điều này và bạn có thể đang nghĩ rằng, chúng tôi đang
‫đưa nó vào CP pont cơ sở Dù sao, vậy sẽ có gì khác biệt nếu chúng ta đưa nó vào tệp này so với tệp khác?
‫Bây giờ đây là nơi vấn đề xuất hiện.
‫Tệp tiêu đề được thiết kế để được bao gồm bởi các tệp khác.
‫Vì vậy, giả sử rằng chúng tôi có Base Pond H và chúng tôi đã bao gồm các thành phần viên nang trong đó.
‫Và sau đó xa hơn, chúng ta có một số lớp khác và chúng ta sẽ có một con trỏ ao cơ sở trong một
‫số lớp khác, giống như chúng ta có một con trỏ thành phần viên nang trong pod cơ sở.
‫Bây giờ, thay vì gặp rắc rối khi khai báo con trỏ ao cơ sở và một số lớp
‫khác, chúng ta sẽ khai báo nó như bình thường và bao gồm con trỏ cơ sở trong một số lớp khác.
‫Vì vậy, bây giờ Base Pond H không chỉ bao gồm tiêu đề thành phần viên nang, điều này dẫn đến nhiều mã được sao
‫chép vào tệp tiêu đề đó.
‫Bây giờ một số lớp khác có cơ sở, bao gồm thành phần viên nang.
‫Vì vậy, tất cả các thành phần nội dung và viên nang cũng nằm bên trong một số lớp H khác và nó thậm chí không cần
‫thiết ở đó.
‫Một số class khác mà H chỉ cần biết về cơ sở thì không cần quan tâm đến thành phần viên nang.
‫Bây giờ giả sử chúng ta tiếp tục mẫu này và tạo một số lớp khác được gọi là lớp khác và một lớp
‫khác có thể cần phải có một con trỏ kiểu một số lớp khác ngay bây giờ thay vì khai báo chuyển tiếp.
‫Chúng tôi chỉ gộp một số lớp H khác vào lớp H khác và bây giờ ở trong lớp H khác.
‫Mặc dù chúng tôi thậm chí không cần tiêu đề cho thành phần ao cơ sở hoặc viên nang H, chúng tôi đã đưa nó
‫vào một lớp khác vì một số lớp khác bao gồm các tệp tiêu đề bên trong nó.
‫Vì vậy, chúng tôi có các bản sao của tất cả nội dung của các thành phần viên nang và dựa trên H chỉ mắc kẹt ở đây
‫trong một lớp khác, làm đầy tệp đó và tăng thời gian biên dịch tất cả vì chúng tôi không chuyển tiếp khai báo.
‫Vì vậy, thay vào đó, điều tốt hơn nên làm là bao gồm các tệp tiêu đề nơi chúng thực sự cần thiết.
‫Vì vậy, nếu chúng tôi lấy các thành phần viên nén và chỉ đưa nó vào dựa trên CPP, thì sau này khi chúng tôi tạo một
‫số lớp khác và thực sự cần sử dụng nhóm cơ sở, chúng tôi có thể bao gồm tiêu đề ở
‫đó và cơ sở dựa trên không bao gồm các thành phần viên nang, vì vậy tất cả mã bổ sung đó không được bao gồm trong một số
‫lớp khác.
‫Và sau đó khi chúng ta tạo ra một lớp khác cần một số lớp khác, chúng ta có thể
‫đưa một số lớp khác h vào một lớp khác mà CPP nơi nó thực sự cần và sau đó là một lớp
‫khác mà H không chứa đầy nội dung của các tệp tiêu đề khác mà nó không cần.
‫Vì vậy, khi các lớp có các phụ thuộc như thế này dựa trên phụ thuộc vào thành phần viên nang, tốt nhất nên giữ các phụ
‫thuộc đó ở mức tối thiểu.
‫Vì vậy, tôi sẽ thách thức bạn tạo ra một lỗi biên dịch.
‫Chúng ta không nên sợ lỗi biên dịch.
‫Chúng chỉ là một phần bình thường của quá trình phát triển.
‫Vì vậy, chúng tôi sẽ tạo ra một cách cố ý quay lại và xóa từ khóa lớp và biên dịch mà không khai
‫báo về phía trước capsule comp.
‫Bây giờ khi tôi nói biên dịch, ý tôi là bạn có thể biên dịch từ mã Visual Studio, chỉ là một biên dịch C ++ thông thường.
‫Bạn đã học cách làm điều đó hoặc bạn có thể chỉ cần lưu tệp và mã Visual Studio của mình và bắt đầu
‫mã hóa trực tiếp.
‫Một trong hai phương pháp đó đều tốt và khi chúng ta cùng nhau giải quyết vấn đề này, tôi sẽ cho bạn thấy điều gì sẽ xảy ra với cả hai
‫phương pháp.
‫Nếu bạn sử dụng mã hóa trực tiếp, tất nhiên bạn sẽ xem đầu ra được tạo trong cửa
‫sổ mã hóa trực tiếp thay vì đầu ra mà bạn sẽ thấy trong mã Visual Studio.
‫Bây giờ spoiler, bạn sẽ gặp lỗi biên dịch, hãy xem thông báo lỗi biên dịch, xem nó nói
‫gì với bạn.
‫Đây chỉ là một cách tự làm quen với các lỗi mà chúng tôi tạo ra.
‫Sau đó, quay lại và chuyển tiếp, khai báo capsule comp bằng từ khóa class.
‫Khi bạn đã hoàn thành việc đó, hãy biên dịch lại, lần này bạn sẽ có được một bản biên dịch thành công.
‫Tạm dừng video và thử cái này.
‫Được rồi, vậy chúng ta hãy phá hoại mã của chúng ta ở đây.
‫Tôi sẽ xóa từ khóa lớp.
‫Được rồi, vì vậy chúng tôi đã cố gắng biên dịch và đây là kết quả đầu ra trong thiết bị đầu cuối.
‫Điều đầu tiên chúng tôi thấy là lỗi và nó cung cấp cho chúng tôi một mã lỗi và nó nói rằng capsule comp không phải là thành viên của
‫một cơ sở cầm đồ cơ sở.
‫Chúng tôi có một ghi chú cho biết khai báo C của một cơ sở cầm đồ và sau đó chúng tôi thấy rằng chúng tôi nhận được các lỗi khác do kết
‫quả của việc này.
‫Vì vậy, đôi khi học sinh sẽ bối rối khi họ cố gắng biên dịch và dường như mắc nhiều lỗi.
‫Vì vậy, điều này cho thấy rằng một sai lầm duy nhất có thể tạo ra một loạt các lỗi.
‫Và điều đó không có nghĩa là bạn phải đi sửa cả đống tệp.
‫Lỗi có thể có một nguồn gốc duy nhất ở đây.
‫Chúng tôi biết nguồn gốc của lỗi là gì.
‫Chúng tôi cần phải chuyển tiếp tuyên bố.
‫Bây giờ chúng ta hãy xem điều gì sẽ xảy ra nếu chúng ta sử dụng mã trực tiếp thay vì mã biên dịch và Visual Studio thông thường.
‫Vì vậy, tôi sẽ tiếp tục và nhấp vào nút để bắt đầu mã hóa trực tiếp và ngay lập tức với màu đỏ, tôi thấy quá trình xây dựng
‫không thành công và chúng tôi thấy điều tương tự ở đây.
‫Ngay tại đây.
‫Capsule comp không phải là thành viên của nốt cầm đồ cơ sở.
‫Xem tuyên bố của một cơ sở cầm đồ.
‫Vì vậy, chúng tôi thấy điều tương tự ở đây.
‫Vì vậy, cả hai trường hợp, chúng ta sẽ gặp lỗi như thế này khi chúng ta quên chuyển tiếp khai báo.
‫Vì vậy, bây giờ chúng ta biết nó trông như thế nào và bây giờ chúng ta có nhiều thông tin hơn và ít sợ hãi hơn về những thông báo lỗi biên
‫dịch bí ẩn này.
‫Vì vậy, những gì chúng tôi sẽ làm là sửa lỗi này bằng cách khai báo trước cho bạn thành phần viên nang và sau đó chúng
‫tôi có thể thử biên dịch lại.
‫Và bây giờ chúng tôi đã biên dịch mà không có bất kỳ lỗi nào.
‫Vì vậy, bây giờ chúng ta thấy nó trông như thế nào khi chúng ta quên chuyển tiếp khai báo một biến.
‫Hãy ghi nhớ điều đó khi bạn gặp lỗi trình biên dịch trong tương lai.
‫Vì vậy, tóm lại, chúng ta đã thảo luận về khai báo chuyển tiếp khi tạo một con trỏ mới và
‫chúng tôi biết rằng bạn chỉ nên đưa những gì bạn sử dụng vào tệp CP và chúng ta nên đưa vào tệp H. càng ít
‫càng tốt.
‫Chúng ta biết rằng chúng ta không cần tệp tiêu đề để khai báo một con trỏ mới miễn là chúng ta khai báo chuyển tiếp
‫và chúng ta cần tệp tiêu đề nếu chúng ta đang xây dựng một đối tượng của một kiểu cụ thể.
‫Và chúng tôi cần tệp tiêu đề để truy cập các thành viên như các hàm và biến và chúng tôi thấy rằng chúng tôi
‫thực sự cần tệp tiêu đề để kế thừa cho việc kế thừa từ một lớp.
‫Chúng tôi cần tệp tiêu đề đó ở đó.
‫Vì vậy, bây giờ chúng ta đã biết cách chuyển tiếp khai báo một kiểu và chúng ta có comp con con trỏ của mình, chúng ta đã sẵn
‫sàng để thực sự xây dựng một đối tượng thành phần capsule và chúng ta sẽ thực hiện điều đó trong video tiếp theo.
‫Tôi sẽ gặp bạn sớm.