多态
多态(Polymorphism)是C++面向对象编程的一个关键概念,它允许你以一种通用的方式处理不同类型的对象,而无需了解它们的具体类型。C++中的多态性通过虚函数(virtual functions)来实现,主要包括两种形式:
多态是一种让你能够以相同的方式处理不同对象的编程概念。这意味着你可以使用相同的代码来处理不同类型的东西,而不需要知道它们的确切类型。
举个例子,想象你有一个玩具箱,里面装着不同类型的玩具,如汽车、娃娃和飞机。多态就像是一种魔法,让你可以使用相同的方式(例如,按下一个按钮)来玩不同类型的玩具,而不用关心你手中拿的到底是什么。无论你按下按钮的对象是汽车、娃娃还是飞机,都会有不同的响应。这就是多态的简单示例,它让你以一种通用的方式处理不同类型的对象。
#include <iostream>class Animal {
public:void makeSound(){std::cout << "动物发出声音" << std::endl;}
};class Dog : public Animal {
public:void makeSound() {std::cout << "狗发出汪汪的声音" << std::endl;}
};class Cat : public Animal {
public:void makeSound() {std::cout << "猫发出喵喵的声音" << std::endl;}
};int main() {Animal* myAnimal;Dog myDog;Cat myCat;myAnimal = &myDog;myAnimal->makeSound(); // 调用狗的声音myAnimal = &myCat;myAnimal->makeSound(); // 调用猫的声音return 0;
}
会输出:
动物发出声音
动物发出声音
添加上关键字virtual
#include <iostream>class Animal {
public:virtual void makeSound(){std::cout << "动物发出声音" << std::endl;}
};class Dog : public Animal {
public:virtual void makeSound(){std::cout << "狗发出汪汪的声音" << std::endl;}
};class Cat : public Animal {
public:virtual void makeSound(){std::cout << "猫发出喵喵的声音" << std::endl;}
};int main() {Animal* myAnimal;Dog myDog;Cat myCat;myAnimal = &myDog;myAnimal->makeSound(); // 调用狗的声音myAnimal = &myCat;myAnimal->makeSound(); // 调用猫的声音return 0;
}输出:
狗发出汪汪的声音
猫发出喵喵的声音
构造函数的作用
对象初始化: 构造函数用于初始化类的对象,确保对象在创建后处于已知和一致的状态。它可以设置对象的成员变量,分配资源,或执行其他必要的初始化操作。
提供默认值: 构造函数可以为类的成员变量提供默认值,以确保对象在创建时具有合理的初始状态。这对于避免未初始化变量的问题非常有用。
资源分配和释放: 如果类需要管理资源(例如内存、文件句柄等),构造函数可以用来分配资源,而析构函数用于释放资源。这确保了资源的正确分配和释放,避免资源泄漏。
初始化成员: 构造函数可以用于初始化类的成员变量,包括调用其他构造函数来初始化基类或成员对象。
参数化对象: 构造函数可以接受参数,允许在创建对象时传递特定的初始化值,以满足不同对象的需求。这有助于实现对象的个性化初始化。
重载构造函数: 一个类可以有多个构造函数,每个构造函数可以接受不同的参数,以便在不同情况下执行不同的初始化操作。这称为构造函数重载。
构造函数的命名与类名相同,没有返回类型(包括不是void),通常使用成员初始化列表来初始化成员变量。在C++中,构造函数可以有默认参数,允许创建对象时省略某些参数,或提供自定义初始化。
总之,构造函数是用于初始化类对象的重要机制,它确保对象在创建时具有合适的状态,并有助于避免潜在的问题,如未初始化变量或资源泄漏