上QQ阅读APP看书,第一时间看更新
1.3 从C++代码的执行过程看编译器支持面向对象语言
大家都知道,Java语言作为面向对象编程语言中的后来者,吸收了其他高级语言的特点,特别是吸收、借鉴了C++的很多特性。JVM作为字节码执行器,在对字节码进行编译和解释时也借鉴了C++编译器的实现。与面向过程的语言不同,面向对象的语言有三大特点:封装、继承和多态。下面从一个具体的实例出发,看一下编译器是如何支持这三大特点的。C++的代码示例如下:
struct CPoint{ double xAxis; double yAxis; }; class CShape { private: double xAxis; double yAxis; public: void setCenter(double xAxis, double yAxis) { this->xAxis = xAxis; this->yAxis = yAxis; } void setCenter(CPoint point) { this->xAxis = point.xAxis; this->yAxis = point.yAxis; } virtual string getType() { string s("Unknown"); return s; } }; class CCircle : CShape { private: double radius; public: virtual string getType() {return string("Circle");} void setRadius(double radius) { this->radius = radius; } };
注意
C++的语法非常复杂,有静态成员函数、多继承、虚继承、模板等。这里只是为了简单演示编译器如何处理面向对象语言,所以仅仅包含了单继承、函数的重载和重写。