前景概要:
这章有点长,主要介绍一下c++里面的类机制和多态。
本章概要:
1.什么是面向对象
2.C++中的面向对象
3.面向对象应该如何使用
4.C++中的多态继承
一.什么是面向对象
首先我们要知道什么是面向过程。
不从很专业的角度来说,面向过程基本是就是,你要解决一个问题,然后一步步实现它,最多用函数来包装起来。然后再一个个调用就成了。
而什么是面向对象呢
面向对象有三个最基本的特性:
1.抽象(封装)
2.继承
3.多态
主要用于增加程序的——重用性——灵活性——扩展性
其实说的不专业一些,就是原来你要封装一条一条指令来编程。而是用面向对象的思想来编程的话,你就可以把一段代码抽象成一个更容易使人理解的东西。并且可以在建模(设计)期就把整个程序的框架设计好。
二.C++中的面向对象
打个比方,一个汉堡,它有好多种类。
我们可以定义一个结构体,来表示这个汉堡。
然后有多少种汉堡,我们就定义多少种结构体。
如下所示,我们有三个汉堡:
struct PorkHamburg
{
int money = 13;
string meat = "pig";
}
struct BaconHamburg
{
int money = 13;
string meat = "pig";
}
struct BeefHamburg
{
int money = 15
string meat = "cow"
}
于是我们定义了三个结构体来表示这三个汉堡。这个也有点面向对象的意味了,首先我们做到了面向对象的第一个特性——抽象,我们给一团数据赋予了一个意义。
但是如果我们有几百种汉堡,他们大多数属性都是一样的,比如说都是猪肉做的,但是每个汉堡还有其他配料怎么办呢。这样代码会写的非常非常长的。这时候面向对象的第二个特性就派上用场了。
*继承*
首先先介绍下c++继承的语法
class 对象名: 继承类型 要继承的对象
代码:
class me : piblic MyFather{}
这样我就继承了MyFather了
依然和刚才一样,我们要做好多好多汉堡。这次汉堡的肉都是猪肉,但是配料却不一样。
这时候我们就可以使用面向对象方法来设计出我们的汉堡架构了。
首先我们先找到所有的汉堡的共同点,都是猪肉做的,价格都一样,不同的是配料。
class PigHamburg
{
public: //属性为公有
int money = 10;
string meat = “pig”
}
然后我们比方说有一块中国猪肉汉堡、一块美国猪肉汉堡。他们都是猪肉汉堡,只是配餐不一样。
class ChinesePigHambug : public PigHambug
{
//因为已经继承了PigHambug,中国猪肉汉堡已经有猪肉汉堡的所有特性了
string name = “中国猪肉汉堡”
}
class AmericaPigHambug : public PigHambug
{
//因为已经继承了PigHambug 美国猪肉汉堡已经有猪肉汉堡的所有特性了
string name = “美国猪肉汉堡”
}
这个就是继承,把父类的东西继承到子类里去,代码复用率很高(但是,在很多设计模式中,都很忌讳用继承。更多的时候使用组合的方式)
三.面向对象该如何使用
恩,关于使用示例什么的,我觉得还是通过代码示例来解释更清楚一些。
在此之前。关于面向对象的哲学什么的还是不说了。
//老师和小明都继承了敌人
#include <iostream>
#include <string>
using namespace std;
class Enemy
{
public:
Enemy(){}{}
float hp = 100;
float attack = 100;
float speed = 100;
};
class Teacher : public Enemy
{
public:
Teacher(){}
};
class Xiaoming : public Enemy
{
public:
Xiaoming(){}
};
//老师和小明都继承了敌人
int main()
{
Teacher *hehe = new Teacher;
cout<<"hehe hp = "<<hehe.hp;
cout<<"hehe attack = "<<hehe.attack;
cout<<"hehe speed = "<<hehe.speed;
Xiaoming *haha = new Xiaoming;
cout<<"hehe hp = "<<haha.hp;
cout<<"hehe attack = "<<haha.attack;
cout<<"hehe speed = "<<haha.speed;
//可以见到,他们都继承了敌人的所有属性
return 0;
}
四.C++中的多态继承 (详细概念请翻阅<<C++ Primer>>
#include <iostream>
#include <string>
using namespace std;
class Enemy
{
public:
Enemy(){}{}
float hp = 100;
float attack = 100;
float speed = 100;
};
class Teacher : public Enemy
{
public:
Teacher(){}
};
class Xiaoming : public Enemy
{
public:
Xiaoming(){}
};
//老师和小明都继承了敌人
void printSth(Enemy * point) //这里用了多态继承,自己动脑经。
{
cout<<"hp = "<<point->hp;
cout<<"attack = "<<point->attack;
cout<<"speed = "<<point->speed;
}
int main()
{
Teacher *hehe = new Teacher;
printSth(hehe)
Xiaoming *haha = new Xiaoming;
printSth(haha)
//可以见到,他们都继承了敌人的所有属性
return 0;
}
结尾:
果断不详细写语法了。
感觉要是写的不准确还会被喷。
只讲一些概念上的问题。和一些代码示例。
请谅解。