Giả sử foo
là một trừu tượngclass
trong một chương trình C++, tại sao nó lại có thể chấp nhận để khai báo các biến kiểu foo*
, nhưng không phải kiểu foo
?khai báo lớp trừu tượng trong C++
Trả lời
Bởi vì nếu bạn khai báo một foo, bạn phải khởi tạo/khởi tạo nó. Nếu bạn khai báo * foo, bạn có thể sử dụng nó để trỏ đến các cá thể của các lớp kế thừa từ foo nhưng không trừu tượng (và do đó có thể được khởi tạo)
Vì một con trỏ đến một foo không phải là một foo - chúng hoàn toàn các loại khác nhau. Tạo một lớp trừu tượng nói rằng bạn không thể tạo các đối tượng của kiểu lớp, không phải là bạn không thể tạo các con trỏ (hoặc các tham chiếu) cho lớp đó.
Cũng kể từ lớp trừu tượng thường được sử dụng như là cha mẹ (Các lớp Base - ABC) mà bạn sử dụng cho polymorphisem
class Abstract {}
class DerivedNonAbstract: public Abstract {}
void CallMe(Abstract* ab) {}
CallMe(new DerivedNonAbstract("WOW!"));
Bạn không thể nhanh chóng một lớp trừu tượng. Và có sự khác biệt giữa các khai báo sau đây.
// declares only a pointer, but do not instantiate.
// So this is valid
AbstractClass *foo;
// This actually instantiate the object, so not valid
AbstractClass foo;
// This is also not valid as you are trying to new
AbstractClass *foo = new AbstractClass();
// This is valid as derived concrete class is instantiated
AbstractClass *foo = new DerivedConcreteClass();
Bởi vì nếu chúng ta khai báo foo, nghĩa là chúng ta đang tạo một thể hiện của lớp foo là trừu tượng và không thể tạo cá thể của lớp trừu tượng. Tuy nhiên, chúng ta có thể sử dụng con trỏ của một lớp trừu tượng để trỏ đến các lớp ổ đĩa của nó để tận dụng lợi thế của đa hình. . .
- 1. Khai báo tín hiệu trừu tượng trong lớp giao diện
- 2. Tại sao lớp HttpServlet được khai báo là trừu tượng?
- 3. Tại sao tôi nên khai báo một destructor ảo cho một lớp trừu tượng trong C++?
- 4. Tại sao khai báo các lớp tĩnh như niêm phong và trừu tượng trong C#?
- 5. C# Lớp trừu tượng triển khai Giao diện
- 6. C++/CLI: Làm thế nào để khai báo lớp trừu tượng (trong C#) và phương thức trong C++/CLI?
- 7. Refactoring lớp trừu tượng trong C#
- 8. Không có tên đối số trong khai báo trừu tượng?
- 9. Làm thế nào để khai báo các lớp trừu tượng phụ thuộc tròn trong F #
- 10. phương pháp chung trong lớp trừu tượng
- 11. C# Làm rõ lớp trừu tượng
- 12. C# triển khai giao diện một phần tốt nhất trong lớp cơ sở/trừu tượng
- 13. Lớp trừu tượng bắt nguồn từ lớp không trừu tượng
- 14. C# và Moq, tăng sự kiện được khai báo trong giao diện từ mô hình lớp trừu tượng
- 15. Biến tĩnh PHP trong lớp trừu tượng
- 16. Whats tiện ích của các nhà thầu công khai trong các lớp trừu tượng trong C#?
- 17. lớp trừu tượng tĩnh
- 18. Tại sao các phương thức giao diện C# không được khai báo trừu tượng hoặc ảo?
- 19. Lỗi: Lớp phải được khai báo trừu tượng hoặc thực hiện các phương pháp còn lại
- 20. AS3 - Lớp trừu tượng
- 21. Java: Trường tĩnh trong lớp trừu tượng
- 22. Tạo giao diện cho mẫu lớp trừu tượng trong C++
- 23. Nếu một lớp trừu tượng có serialVersionUID
- 24. Deserializing một lớp trừu tượng trong Gson
- 25. Biến/thuộc tính trừu tượng? C#
- 26. Sự khác nhau giữa lớp trừu tượng và lớp trừu tượng thuần túy trong C++ là gì?
- 27. C++: Tạo lớp trừu tượng với phương thức trừu tượng và ghi đè phương thức trong lớp con
- 28. viết C# thực hiện nội tuyến lớp trừu tượng?
- 29. C++ tham số lớp trừu tượng lỗi workaround
- 30. C# ẩn danh triển khai giao diện (hoặc lớp trừu tượng)
Bạn cũng có thể khai báo các tham chiếu cho các lớp trừu tượng như 'foo &'. – iammilind
Bởi vì tôi muốn thao tác đối tượng của hình dạng kiểu chung (vì vậy tôi cần một con trỏ hoặc tham chiếu đến một hình dạng). Nhưng tôi chắc chắn không muốn các đối tượng của kiểu hình dạng vì đây là một trừu tượng tôi cần các đối tượng có hình vuông hoặc hình tròn. –