2011-04-18 62 views
5

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++

+0

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

+0

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. –

Trả lời

12

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)

0

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 đó.

1

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!")); 
2

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(); 
0

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. . .

Các vấn đề liên quan