码迷,mamicode.com
首页 > 编程语言 > 详细

C++:面向对象

时间:2018-08-28 14:21:29      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:友元   hda   sage   无法   ram   空字符串   消息   不同的   类型转换   

面向对象的特性

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‘,‘\0‘};

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;

 

动态类型转换

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

C++:面向对象

标签:友元   hda   sage   无法   ram   空字符串   消息   不同的   类型转换   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!