Không thừa kế hàm constructor

Mọi người ơi. Lớp dẫn xuất kế thừa tất cả các phương thức của lớp cơ sở ngoại trừ:
– Hàm tạo, hàm hủy và hàm tạo copy
– Chồng toán tử của lớp cơ sở
– Hàm bạn của lớp cơ sở.

Ởchương trình này mình thấy là Dog đang thừa kế Pet hàm constructor Pet(n), vậy mình hiểu sai chỗ nào, các bạn phân tích giúp mình với.

#include <iostream>
using namespace std;
 
class Pet {
protected:
    string Name;
public:
    Pet(string n) { Name = n; }
    virtual string getSound() { return "";};
    void makeSound(void) { cout << Name << "says: " << getSound() << endl; }
};
 
class Cat : public Pet {
public:
    Cat(string n) : Pet(n) { }
    string getSound() { return "Meow! Meow!";};
};
 
class Dog : public Pet {
public:
    Dog(string n) : Pet(n) { }
    string getSound() { return "Woof! Woof!";};
};
 
int main(void) {
    Pet *a_pet = new Cat("Kitty");;
    a_pet->makeSound();
    delete a_pet;
 
    a_pet = new Dog("Doggie");
    a_pet->makeSound();
    delete a_pet;
 
    return 0;
}

Hi ITSRD.
Theo mình bạn đang hiểu nhầm về kết thừa. Ở đây nghĩa là bạn không phải làm gì cũng có hàm đó. VD makeSound. Trong lớp Dog bạn không viết lại nó nhưng đối tượng a_pet vẫn gọi như bình thường. Hàm khởi tạo bạn viết lại nên nó có là bình thường.

4 Likes

À mình hiểu rồi :smiley: cảm ơn bạn nha, tiện thể mình hỏi luôn, toán tử " :" á, nó gọi là toán tử gì vậy, nó còn dùng trường hợp nào nữa không?

Hi ITSRD.
Toán tử : ???

1 Like

Hi Phong_Ky_Vo
Ừ, nó không phải là toán tử à?

Cái này gọi là dấu phân cách bạn :smiley:

Toán tử thì nó phải trả về kết quả.

3 Likes

bạn đang nói dấu : như đoạn code trên à.
đó không phải toán tử. đó chỉ là cú pháp trong C++.Để C++ biết được class đó được kế thừa từ đâu thôi.

3 Likes

Cảm ơn mọi người nhiều nha <3

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?