Lỗi: Không thể khởi tạo lớp trừu tượng

Loi Khong The Khoi Tao Lop Truu Tuong



Bài viết này nói về một lỗi khác thường xảy ra khi chúng ta làm việc với các lớp trừu tượng trong mã của mình. Chúng ta hãy nghiên cứu khái niệm lớp trừu tượng trong Lập trình hướng đối tượng. Một lớp không thể có bất kỳ đối tượng nào được tạo từ chính nó được gọi là lớp trừu tượng. Nó còn được gọi là giao diện trong ngôn ngữ C++. Bất kỳ lớp nào cũng có thể được tạo thành trừu tượng trong Ngôn ngữ C++ bằng cách khai báo một hàm thuần ảo trong đó. Để khai báo một hàm ảo, chúng ta phải đặt “=0” sau hàm. Lớp trừu tượng đóng vai trò là lớp cha hoặc lớp cơ sở mà từ đó tất cả các lớp con khác được dẫn xuất. Vì vậy, để truy cập lớp trừu tượng, chúng ta phải kế thừa nó từ các lớp cơ sở của nó. Khi chúng tôi cố gắng khởi tạo một lớp trừu tượng, chúng tôi gặp lỗi biên dịch.

cú pháp

Thông báo lỗi của lỗi của chúng tôi là như sau:

lỗi : không thể khai báo biến ‘ ’ là kiểu trừu tượng ‘’

Lưu ý rằng trong ngoặc đơn trống, sẽ có tên biến và lớp trừu tượng.







lỗi C2259 : 'Tiểu bang' : không thể khởi tạo lớp trừu tượng

Đây là một thông báo khác mà chúng tôi nhận được từ trình biên dịch khi gặp lỗi như vậy.



Ví dụ # 01:

Để làm cho lỗi này dễ hiểu, chúng tôi sẽ thực hiện một ví dụ trong đó chúng tôi sẽ viết mã của mình theo cách mà chúng tôi gặp lỗi. Với mục đích đó, chúng ta đã khởi tạo một lớp với tên “ShapeClass”. Để làm cho lớp này trở nên trừu tượng, chúng tôi đã khai báo một hàm ảo trong đó với tên “getArea”. Chúng tôi cũng đã khai báo hai hàm khác với tên lần lượt là “setWidth” và “setHeight”. Điều chúng tôi muốn làm ở đây là chúng tôi muốn lấy Chiều cao làm tham số và chiều rộng làm tham số đầu vào. Chúng tôi sẽ tính diện tích với sự trợ giúp của các tham số đầu vào của chúng tôi. Chúng tôi đã tạo một phiên bản của lớp trong phương thức chính. Với sự trợ giúp của đối tượng đó, chúng tôi đã gọi các phương thức và chúng tôi sẽ truyền các tham số đầu vào thông qua các phương thức đó. Sau đó, chúng tôi in đầu ra của mình để kiểm tra kết quả.



#include

sử dụng không gian tên std ;
lớp Hình dạngLớp học
{
công cộng :
ảo int Getaria ( ) = 0 ;
khoảng trống setWidth ( int Trong )
{
bề rộng = Trong ;
}
khoảng trống setHeight ( int h )
{
Chiều cao = h ;
}
được bảo vệ :
int bề rộng ;
int Chiều cao ;
} ;
int chính ( khoảng trống )
{
Hình dạngClasssh ;
sh. setWidth ( 1 ) ;
sh. setHeight ( hai ) ;
cout << 'Tổng diện tích hình chữ nhật:' << sh. Getaria ( ) << kết thúc ;
trở về 0 ;
}

Hệ thống báo lỗi cho chúng tôi sau khi thực thi mã của chúng tôi. Thông báo lỗi nói rằng chúng ta không thể khai báo biến 'sh' là kiểu trừu tượng 'shapeclass'. Bây giờ, trình biên dịch đang cố truyền đạt rằng 'ShapeClass' là một kiểu trừu tượng và chúng ta không thể khai báo biến của nó. Vì vậy, với thông báo, chúng ta có thể hiểu rõ ràng rằng trình biên dịch không cho phép chúng ta khởi tạo lớp trừu tượng của mình, đó là lý do tại sao hệ thống báo lỗi cho chúng ta.





Để giải quyết lỗi, chúng tôi đã khai báo một lớp khác 'Hình chữ nhật'. Lớp này sẽ là lớp con của lớp trừu tượng của chúng ta và chúng ta sẽ khai báo phần thân của hàm ảo trong lớp này. Sau đó, chúng ta sẽ tạo đối tượng của nó trong phương thức chính và với sự trợ giúp của đối tượng đó, chúng ta sẽ gọi các hàm.



Sau khi sửa đổi, chúng tôi đã tạo mã của mình và hiện tại chúng tôi đã thành công trong việc chạy mã của mình. Hệ thống đã thực thi mã của chúng tôi mà không đưa ra lỗi. Chúng ta có thể thấy trong đầu ra rằng hệ thống đã tính diện tích của một hình chữ nhật và in đầu ra. Chúng tôi đã học được rằng sai lầm của chúng tôi là chúng tôi đã gọi trực tiếp đối tượng của lớp trừu tượng của mình, đó là cách tiếp cận sai. Khi chúng tôi gọi đối tượng của lớp con của nó, mã của chúng tôi bắt đầu hoạt động tốt.

Ví dụ #02:

Trong ví dụ này, chúng tôi sẽ không thực hiện bất kỳ phép tính toán học nào. Ví dụ này là một ví dụ chung sẽ giúp chúng ta hiểu các lớp trừu tượng và cách trình biên dịch chạy giữa các phương thức và lớp trong khi thực thi mã. Trong lớp này, chúng tôi đã tạo một lớp trừu tượng và đặt tên là “AbsClass”. Chúng ta đã khai báo một lớp khác là “ChildClass” nhưng lớp này không phải là một lớp trừu tượng. Lớp này có nguồn gốc từ lớp trừu tượng của chúng tôi.

Chúng tôi đã in “Giá trị được truyền bằng cách sử dụng đối tượng” trong một phương thức được khai báo trong lớp trừu tượng. Tên của hàm là “valueFunc”. Như chúng ta đã thảo luận, phần thân của hàm ảo được khai báo trong lớp con. Trong lớp con của chúng ta, chúng ta đã in “In virtual function” trong thân hàm ảo của chúng ta. Bây giờ, chúng ta sẽ chuyển một giá trị cho hàm giá trị của mình và xem liệu giá trị đạt được có chính xác hay không. Trong phương thức chính của chúng ta, chúng ta đã tạo một thể hiện của lớp trừu tượng và với sự trợ giúp của thể hiện đó, chúng ta sẽ gọi các hàm ảo và các hàm khác. Bây giờ, chúng tôi sẽ thực thi mã của chúng tôi.

#include

sử dụng không gian tên std ;
lớp AbsLớp
{
công cộng :
ảo int VirtFunc ( ) = 0 ;
khoảng trống giá trịFunc ( int Trong )
{
bề rộng = Trong ;
cout << 'Giá trị được truyền bằng cách sử dụng Đối tượng' << Trong << kết thúc ;
}
được bảo vệ :
int bề rộng ;
} ;
lớp ConLớp :
lớp abs công cộng
{
công cộng :
int VirtFunc ( ) {
cout << 'Trong chức năng ảo' << kết thúc ;
}
} ;
int chính ( khoảng trống )
{
ConLớp cc ;
cc. giá trịFunc ( 5 ) ;
cout << cc. VirtFunc ( ) << kết thúc ;
trở về 0 ;
}

Sau khi thực thi mã của chúng tôi, chúng tôi sẽ gặp lỗi. Lỗi này về cơ bản là chúng ta không thể khởi tạo một lớp trừu tượng mà chúng ta đang cố gắng thực hiện ở đây trong phương thức chính của mình. Một điều cần lưu ý ở đây là biến và kiểu trừu tượng trong thông báo của chúng ta đã được thay đổi.

Bây giờ, chúng tôi sẽ cố gắng loại bỏ lỗi và thực thi mã của mình. Với mục đích đó, chúng ta sẽ tạo đối tượng của lớp con và tạo thể hiện của nó. Với sự trợ giúp của cá thể đó, chúng ta sẽ gọi cả phương thức ảo và phương thức khác trong lớp trừu tượng của mình. Nó cũng sẽ được quan sát xem liệu chúng ta có thể truy cập chức năng ảo bằng cách sử dụng lớp con hay không. Nếu chúng ta thành công trong việc này, chúng ta có thể nói rằng chúng ta đã truy cập lớp trừu tượng bằng cách sử dụng lớp dẫn xuất của nó.

Khi thực thi mã của chúng ta, lần này trình biên dịch không đưa ra bất kỳ lỗi nào. Thay vào đó, hệ thống đã biên dịch thành công mã của chúng tôi và cung cấp cho chúng tôi đầu ra. Bây giờ, chúng ta hãy xem đầu ra. Hệ thống đã in “Giá trị được chuyển bằng Đối tượng” và “5” đối với nó. Bởi vì chúng tôi đã vượt qua 5 bằng cách sử dụng phiên bản của chúng tôi trong phương thức chính. Sau đó, nó in dòng mà chúng tôi yêu cầu trong chức năng ảo của mình.

Sự kết luận

Trong hướng dẫn này, chúng tôi đã thảo luận về các lỗi nghiêm trọng mà các lập trình viên gặp phải khi viết mã và thực hành các khái niệm hướng đối tượng. Những loại lỗi này thường xảy ra khi lập trình viên xử lý các lớp trừu tượng. Toàn bộ bài viết tóm tắt rằng các lớp trừu tượng không thể được khởi tạo và chúng ta không thể làm cho các đối tượng của chúng gọi các phương thức trong đó. Chúng tôi cũng đã thử các ví dụ khác nhau để tạo lỗi và sau đó giải quyết các lỗi trong mã của chúng tôi.