#include <iostream>
#include <string>
using namespace std;

class Dog {
private:
    // 私有成员变量
    string name;
    int age;
    static int dogCount; // 静态成员变量

public:
    // 构造函数重载
    Dog() : name("无名"), age(0) {
        dogCount++;
        cout << name << "诞生了!当前小狗总数: " << dogCount << endl;
    }
    
    Dog(string n) : name(n), age(0) {
        dogCount++;
        cout << name << "诞生了!当前小狗总数: " << dogCount << endl;
    }
    
    Dog(string n, int a) : name(n), age(a) {
        dogCount++;
        cout << name << "诞生了,今年" << age << "岁!当前小狗总数: " << dogCount << endl;
    }
    
    // 析构函数
    ~Dog() {
        dogCount--;
        cout << name << "离开了我们...当前小狗总数: " << dogCount << endl;
    }
    
    // 普通成员函数
    void bark() {
        cout << name << ": 汪汪!" << endl;
    }
    
    void introduce() {
        cout << "我是" << name;
        if(age > 0) {
            cout << ",今年" << age << "岁";
        }
        cout << "!" << endl;
    }
    
    // 静态成员函数
    static int getDogCount() {
        return dogCount;
    }
    
    // 公有函数访问私有成员
    void setName(string n) {
        name = n;
    }
    
    string getName() {
        return name;
    }
};

// 初始化静态成员变量
int Dog::dogCount = 0;

int main() {
    cout << "=== 小狗世界模拟程序 ===" << endl;
    cout << "初始小狗数量: " << Dog::getDogCount() << endl << endl;
    
    // 创建不同的小狗对象
    Dog dog1;
    Dog dog2("小白");
    Dog dog 3 ("小黑", 2)
    ;
    
    cout << endl << "=== 小狗自我介绍 ===" << endl;
    dog1.introduce();
    dog2.introduce();
    dog3.introduce();
    
    cout << endl << "=== 小狗叫一声 ===" << endl;
    dog1.bark();
    dog2.bark();
    dog3.bark();
    
    cout << endl << "当前小狗总数: " << Dog::getDogCount() << endl;
    
    cout << endl << "=== 给无名小狗起名字 ===" << endl;
    dog1.setName("小黄");
    cout << "现在第一只小狗叫: " << dog1.getName() << endl;
    dog1.introduce();
    
    cout << endl << "=== 程序结束,小狗们离开 ===" << endl;
    // 当main函数结束时,所有对象会自动销毁,析构函数会被调用
    return 0;
}

0 条评论

目前还没有评论...