zoukankan      html  css  js  c++  java
  • C++面向对象编程

    1,访问属性

    区分内部可见(成员函数对数据成员的访问)和外部可见(对象对成员的访问)

    1)public:内部和外部皆可见

    2)private:内部可见,外部不可见

    3)protected:内部可见,继承类的内部可见,外部不可见

    继承属性:

    public类型的继承:在子类中,原来public,protected,private等依旧为public,protected,private

    protect类型的继承:在子类中,原来public,protected,private等变为protected,protected,不可见

    private类型的继承:在子类中,原来public,protected,private等变为private,private,不可见

    结合访问属性和继承属性,就可以推导处各种情况下的访问权限问题。其中private只能在父类内部调用,对于其他都是不可见的。

    2,继承的二义性

    1)一个指向基类的指针可以指向该类的任何派生类对象,这是c++实现多态的关键

    2)可以把基类的指针/引用强制转换为派生类的指针/引用,这再java里面是不容许的,但再c++里面,利用该指针再调用子类具有,基类没有的属性的时候,居然不报错,实在很神奇。

    3,虚函数与多态

    c++中的虚函数可以被对象正常调用,纯虚函数才类似于java里的抽象函数。一旦基类声明虚函数,那么不管子类有没有virtual,都为虚函数。

    多态是指同一个操作作用于不同的对象会产生不同的相应,分为静态多态和动态多态。

    静态多态发生在编译阶段,如函数重载。(通过不同对象调用对应函数本质上不叫多态)

    动态多态发生在运行阶段,通过虚函数和指针/引用来实现。

    (使用指针访问非虚函数时候,编译器根据指针本身类型决定调用哪个函数;使用指针访问虚函数的时候,编译器根据指针指向的对象类型决定调用哪个函数)。因此:实现动态多态需要满足两个条件:

    1)成员函数声明为虚函数

    2)使用指向基类类型的指针或者引用进行函数调用

    4,c++类的内存布局

    1)对于一个类来说,类里面的static数据成员存放在所有对象之外,非static成员被配置到每个对象。不会对对象占用的内存造成影响。

    2)类里面的成员函数也放置在所有对象之外,如果类包含虚函数,那么编译系统给每一个对象一个虚函数指针(ptr),指向每个对象自己的虚函数表。虚函数表中记载的是对应需要调用函数的入口地址。

  • 相关阅读:
    静态方法中访问类的实例成员
    Java Interger类,两对整数明明完全一样,为何一个输出true,一个输出false
    使用类的静态字段和构造函数,跟踪某个类所创建对象的个数
    Java基础笔记3
    Java 统计单词频数
    重拾javaweb(假期后第一次web测试)
    人月神话读后感(三)
    人月神话读后感(二)
    人月神话读后感(一)
    七天开发安卓软件(七)
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3782447.html
Copyright © 2011-2022 走看看