Lzp729@Blog
道法自然
Browse: Home / 面向对象

面向对象

PHP知识整理 (7) 面向对象的PHP

By lzp729 on July 2, 2009

PHP访问限制使用public(默认), protected和private. 仅支持类成员和类函数的访问控制, 不支持继承方式的控制.
构造函数__construct(), 析构函数__destruct(), 访问器__get()和__set(), __call()重载函数, __autoload()在初始化对象前自动载入某些需要的文件, __toString()自动转换成string. __clone()方法相当于C++的copy-constructor.
extend关键字继承, 对于受访问控制父类的成员和函数, 在子类中的访问性同C++. PHP默认支持多态.
final关键字限制类禁止被继承或重载. abstract关键字指定类为抽象类, 不能被实例化, abstract关键字指定类函数为抽象函数, 无需提供定义.
类内部使用$this->访问内部成员或函数,使用parent::显式访问父类成员.
PHP不支持多重继承, 但提供了类似java的接口机制interface. 接口中仅提供函数声明即可.
pre-class: 将类成员定义为const, 类外部使用::直接访问.
static静态函数, 类外部使用::直接访问.
instanceof检查变量是否为某个类的对象.
foreach迭代访问类内的每个成员.
反射ReflectionClass
对于__clone()函数, 其内部默认的$this指针, 指的是clone等式左端的要得到的对象, 其实并不存在有些实例中的$that指针, 这个错误已确证来自于国内的一本权威php杂志的一篇文章, 但其实并不存在该指针, 事实上,对于__clode()函数理解应该是当php解析到$a = clone $b时, 首先完成了按位复制操作, 然后再在函数体内通过$this来规避按位复制的问题, 在这一点上php与C++的处理方式是完全不同的, 简而言之, php是先用被clone对象按位复制到新对象, 然后来改变, 而C++则是从初始化的初期就由程序员控制.
PHP4中类对象默认是按值传递, 而PHP5默认是按引用传递.
PHP构造函数和析构函数不能自动调用父类的构造或析构函数.

class example:

interface itfc
{
function output();
}
 
abstract class A
{
abstract function foo();
}
 
class B extends A implements itfc
{
function __autoload()
{
include("file.inc");
echo "autoload in [...]

Posted in PHP知识整理 | Tagged PHP, 知识整理, 面向对象 | Leave a response

C++知识整理 (11) 面向对象编程与泛型编程

By lzp729 on June 21, 2009

OOP 通过封装, 继承和动态绑定实现.
多态仅用于通过继承而相关的类型的引用或指针.
基类希望派生类重定义的函数应定义为virtual, 于是该函数拥有了多态的能力.
通过基类的引用或指针调用虚函数时, 发生动态绑定.
继承: class derived : access_label base
派生类一般会重定义所继承的虚函数, 如果没有重定义某虚函数, 则使用基类的函数, 基类中定义的virtual函数将一直是虚, 即使派生类在重定义时无virtual关键字. 类外实现virtual函数时不加virtual关键字.
基类必须完整定义后才能作为基类, 派生关系的声明是错误的.
class Base; class Derived : public Base; // 错
class Base: class Derived; //对
动态绑定发生的两个条件: 1. 虚函数才能动态. 2. 基类的指针或引用.
多态性对对象无效, 仅对指针或引用有效.
可用域限定符强制使用虚函数.

class Base;
class Derived;
Base * pb = &derived;
pb ->Base::VF(); // 显式调用基类虚函数

虚函数默认实参在编译时确定, 通过基类或派生类的引用或指针调用虚函数时, 虚函数的默认实参为基类或派生类中指定的值. 若基类或派生类中同一虚函数默认实参值不同, 那么在通过基类指针或引用调用虚函数时, 基类的实参会传递给派生类实参.

#include <cstdlib>
#include <iostream>
 
using namespace std;
 
class X
{
public:
[...]

Posted in C++知识整理 | Tagged C++, 泛型编程, 知识整理, 面向对象 | Leave a response

面向对象

  • PHP知识整理 (7) 面向对象的PHP
  • C++知识整理 (11) 面向对象编程与泛型编程

Copyright © 2012 Lzp729@Blog.

Powered by WordPress and Hybrid, Theme By Lzp729.

RSS feed Site Map