大家好,今天主要和大家分享一下,多态,数据封装的使用方法。
目录
第一:C++中的多态
第二:C++中数据封装方法
第一: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 类型的数。所以我们需要在构造函数里初始化,也体现了构造函数的功能,一般是在构造函数里 初始化。不要在类内直接赋值初始化,有可能有些编译器不支持。