第一:C++中的多态
C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数;
形成多态必须具备三个条件:
1. 必须存在继承关系;
2. 继承关系必须有同名虚函数(其中虚函数是在基类中使用关键字 virtual 声明的函数,在派
生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数);
3. 存在基类类型的指针或者引用,通过该指针或引用调用虚函数。
这里我们还需要理解两个概念:
#include <iostream> #include <string> using namespace std; /* 定义一个动物类 */ class Animal { public: virtual void run() { cout<<"Animal 的 run()方法"<<endl; } }; /* 定义一个狗类,并继承动物类 */ class Dog : public Animal { public: void run() { cout<<"Dog 的 run()方法"<<endl; } }; /* 定义一个猫类,并继承动物类 */ class Cat : public Animal { public: void run() { cout<<"Cat 的 run()方法"<<endl; } }; int main() { /* 声明一个 Animal 的指针对象,注:并没有实例化 */ Animal *animal; /* 实例化 dog 对象 */ Dog dog; /* 实例化 cat 对象 */ Cat cat; /* 存储 dog 对象的地址 */ animal = &dog; /* 调用 run()方法 */ animal->run(); /* 存储 cat 对象的地址 */ animal = &cat; /* 调用 run()方法 */ animal->run(); return 0; }
第二:C++中数据封装方法
数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴
露接口而把具体的实现细节隐藏起来的机制,C++ 通过创建类来支持封装和数据隐藏(public、 protected、private)。
#include <iostream> #include <string> using namespace std; class Dog { public: string name; Dog(int i = 0) { total = i; } void addFood(int number) { total = total + number; } int getFood() { return total; } private: int total; }; int main() { Dog dog; dog.name = "旺财"; dog.addFood(3); dog.addFood(2); cout << dog.name << "总共获得了"<<dog.getFood() << "份食物" << endl; return 0; }
分析:在构造函数里初始化 total 的数量,不初始化 total 的数量默认是随 int 类型的数。所以我们需要在构造函数里初始化,也体现了构造函数的功能,一般是在构造函数里 初始化。不要在类内直接赋值初始化,有可能有些编译器不支持。