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

    面向对象的特性

    Abstraction(抽象)

    Polymorphism(多态)

    Inheritance(继承)

    Encapsulation(封装)

    类的定义

    class Circle{

    public:

      double radius;

      Circle(){

        radius = 1;

      }

      Circle(double r){

        radius = r;

      }

      double getArea(){

        return radius*radius*3.14159;

      }

    };

    类是一种数据类型

    对象指针:用指针访问对象成员

    Circle circle1;

    Circle *pCircle = &circle1;

    两者效果相同:

    (*pCircle).radius

    pCircle->radius

    在堆上创建对象

    在函数中声明的对象都一般在栈上创建,函数返回后对象就被销毁。为了保留对象,可以用new运算符在堆上创建它。

    ClassName *pObject = new ClassName();

    delect pObject; //当程序结束时动态对象会被系统销毁,程序员也可以手动显示销毁

    创建string对象

    用无参构造函数创造一个空字符串

    string newString;

    用一个字符串常量创建string对象

    string message("Aloha World");

    用字符串数组创建string对象

    char charArray[] = {'H','e','l','l','o',''};

    string message1(charArray)

    内建指针this:指向当前函数的调用对象

    构造函数的初始化

    当类的数据域是一个对象类型,而且当这个对象的类本身没有无参构造函数时,须通过初始化列表来初始化对象。

    静态成员

    可以通过类或者对象调用静态函数,只能通过对象调用非静态函数。

    当变量或者函数不依赖于类的实例时,可以将此变量/函数定义为静态。

    析构函数

    友元:通过friend声明友元函数或者友元类,从而可以通过友元访问private成员

    拷贝构造函数(copy constructor)

    ClassName(ClassName&)

    唤起拷贝构造函数:

    ClassName obj1(obj2);

    或 ClassName obj1 = obj2;  //只能在初始化时拷贝

    浅拷贝:拷贝指针,而非指针所指向的内容

    深拷贝:获取原指针的内容,创建新指针,拷贝原指针指向的内容到新指针里

    定制深拷贝构造函数:

    Person::Person(Person& person){

      id = person.id;

      Date* p = person.getBirthDate();

      birthDate = new Date(*p);

    }

    Vector类

    继承

    DerivedClass(parameterList) : BaseClass() { }

    DerivedClass(parameterList) : BaseClass(argumentList) { }

    多态:不同的对象对相同的消息有不同的相应

    联编:确定具有多态的语句调用哪个函数的过程

    -> 静态联编:在程序编译时确定调用哪个函数(函数重载)

    -> 动态联编:在程序运行时才确定调用哪个函数(运行时多态)

    虚函数(virtual)

    如何实现函数的动态联编:

    1)基类定义同名虚函数

    2)访问对象的成员函数时,要用指向对象的指针或者对象引用

    基类与派生类中有同名函数时:

    1,通过派生类对象访问同名函数 -> 静态联编

    2,通过基类对象的指针访问同名函数 -> 静态联编

    3,通过基类对象的指针访问同名虚函数 ->动态联编

    抽象类:完全无法实例化的类

    纯虚函数:

    在抽象类GemoetricObject里定义函数virtual double getArea() = 0;

    动态类型转换

  • 相关阅读:
    116. Populating Next Right Pointers in Each Node
    117. Populating Next Right Pointers in Each Node II
    经典排序算法总结(含JAVA代码实现)
    Android面试算法篇(java)
    Android单例模式
    Android进阶-Android APK安装过程
    Android进阶-Android性能优化总结
    Android进阶-Android内存泄漏总结
    Android进阶-Android权限处理
    Android进阶-一个APP从启动到主页显示经过了哪些过程?
  • 原文地址:https://www.cnblogs.com/bl8ck/p/9538405.html
Copyright © 2011-2022 走看看