Skip to content

c++基础 类的声明与使用 #1

@wuyuedefeng

Description

@wuyuedefeng
#include <iostream>

class Animal {
public:
    virtual void speak() {
        std::cout << "Animal speak" << std::endl;
    }
protected:
    std::string name;
    int age;
};

// virtual 解决菱形继承, B -> A, C -> A, D -> B&C, 使D只保留一份A
class Dog: public /*virtual*/ Animal {
    // 友元 该函数内可以访问私有变量
    friend void printDogInfo(Dog &dog);
public:
    // 构造函数
    Dog() {
        std::cout << "默认构造函数" << std::endl;
        name = "unknown";
        age = 0;
    }
    Dog(std::string name, int age = 0) {
        std::cout << "有参构造函数" << std::endl;
        this -> name = name;
        this -> age = age;
    }
    void speak() {
        std::cout << "Dog speak" << std::endl;
    }

    ~Dog() {
        std::cout << "析构函数: " << name << std::endl;
    }
};

void printDogInfo(Dog &dog) {
    std::cout << "name: " << dog.name << " age: " << dog.age << std::endl;
}


int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";

    Dog dog;
    dog.speak();
    printDogInfo(dog);

    {
        Animal *dog2 = new Dog("二哈");
        // 这里期望调用Dog的speak,所以Animal内的speak需要使用虚函数
        dog2 -> speak();

        delete dog2;
    }

    return 0;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions