Menu
CoddyTech

Ôn tập: Greeter

Thuộc phần Lập trình hướng đối tượng trong hành trình C của Coddy. Bài học 43 trên 61.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống Greeter minh họa tính đa hình thông qua con trỏ hàm: cùng một kiểu struct tạo ra các đầu ra khác nhau tùy theo hàm chào hỏi nào được gán.

Bạn sẽ tổ chức code trong ba tệp:

  • greeter.h: Định nghĩa giao diện greeter tại đây. Tạo một kiểu con trỏ hàm có tên là GreetFunc, nhận vào một const char* (tên cần chào) và không trả về gì. Sau đó, định nghĩa một struct Greeter chứa language (kiểu const char*) và một con trỏ hàm greet có kiểu GreetFunc.
  • greeter.c: Triển khai các hàm chào hỏi đại diện cho những ngôn ngữ khác nhau:
    • greet_english: in ra Hello, name!
    • greet_spanish: in ra Hola, name!
  • main.c: Kết hợp mọi thứ tại đây. Tạo hai đối tượng Greeter, một cho tiếng Anh và một cho tiếng Tây Ban Nha, mỗi đối tượng được gán hàm chào hỏi tương ứng. Đọc tên đầu vào, sau đó gọi hàm greet của cả hai greeter để minh họa hành vi đa hình.

Chương trình sẽ nhận một đầu vào duy nhất: một tên cần chào.

Tạo một greeter tiếng Anh có ngôn ngữ được đặt thành English và một greeter tiếng Tây Ban Nha có ngôn ngữ được đặt thành Spanish. Với mỗi greeter, in ngôn ngữ của nó theo sau là dấu hai chấm và dấu cách, rồi gọi hàm greet của nó với tên đầu vào.

Đầu ra ví dụ khi đầu vào là Maria:

English: Hello, Maria!
Spanish: Hola, Maria!

Đầu ra ví dụ khi đầu vào là Carlos:

English: Hello, Carlos!
Spanish: Hola, Carlos!

Cả hai greeter đều có cùng kiểu Greeter, nhưng chúng tạo ra lời chào khác nhau vì mỗi đối tượng được gán một hàm khác nhau cho thành viên greet. Nhớ dùng include guard trong tệp header.

Tự làm thử

#include <stdio.h>
#include <string.h>
#include "greeter.h"

int main() {
    // Đọc tên từ đầu vào
    char name[100];
    scanf("%s", name);
    
    // TODO: Tạo bộ chào hỏi bằng tiếng Anh
    // - Đặt language thành "English"
    // - Đặt greet thành hàm (function) greet_english
    
    
    // TODO: Tạo bộ chào hỏi bằng tiếng Tây Ban Nha
    // - Đặt language thành "Spanish"
    // - Đặt greet thành hàm greet_spanish
    
    
    // TODO: Với mỗi bộ chào hỏi:
    // 1. In ra language, sau đó là ": "
    // 2. Gọi hàm greet với tên đã nhập
    
    
    return 0;
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C online