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;

动态类型转换

原文地址:https://www.cnblogs.com/bl8ck/p/9538405.html