最近读了matt weisfeld写的《写个大家看的面向对象编程书》,这本书主要讲了面向对象的一些主要的思想。侧重于向读者解释面向对象中的一些概念和思想。
我对面向对象的一些认识:面向对象主要是来自与人类世界自己的一种思考方式,当我们考虑一个事物时,一般是将事物作为一个对象进行思考。其中对象有自己的一些属性,同时也有自己的一些行为。这体现在面向对象中主要有,多态性,虚函数,继承,组合,隐藏,接口和实现等等
以下将对这其中的重要的一些观点进行介绍
多态性:指对于同一个消息,不同的对象对于此消息会有不同的结果,即多种形态的意思。如画出一些图形,对于同一个draw方法,在circle,star,square中的实现方法各不相同,对于这个图形消息,会得到不同的图像。、
继承:它是面向对象中最重要的一个结果。即表现为子类继承超类(父类)的属性和方法,是一种is-a的关系,这样在构建一个新的对象时,会带来极大的方便性。如狗和猫都是哺乳动物,可以建立一个哺乳动物的超类,这样在建立狗对象和猫对象时就会带来很大的方便性。
组合:一个对象包含其他对象,是has-a的关系。如汽车包含了轮胎、发动机等等。它和继承还是有很大的区别的
虚类:包含虚函数的类,是不能被实例化的
虚函数:不能提供实现的函数,可以再继承中实现。是实现多态的基础。
类中的三种属性:public,protect,private,其中的private实现了隐藏,即只有自己的类和子类才能访问它,其他的类没有访问的权限。
一般来说,最好的设计就是竟可能的隐藏细节,提供竟可能少的接口。
如上图中的继承关系和一些虚函数的一些关系,是VS2010中的类的视图。
shape类的声明
#pragma once
#include <iostream>
class shape
{
public:
shape(void);
~shape(void);
virtual void draw();
};
circle的定义
#include "StdAfx.h"
#include "circle.h"
#include "shape.h"
circle::circle(void)
{
}
circle::~circle(void)
{
}
void circle::draw()
{
std::cout<<"i am drawing circle"<<std::endl;
}