1、面向对象的基本概念:
对象是现实世界中实际存在的事物,是构成世界的一个独立单位,它由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一个独立整体。
类:在面向对象的方法中,类是具有相同属性和行为的一组对象的集合,它提供一个抽象的描述,其内部包括属性和行为两个主要部分。
抽象:是通过特定的实例抽取共同特征以后形成概念的过程。抽象化主要是为了使复杂度降低,是面向对象编程思想的本质。
2、面向对象的基本特征:
封装:是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想。
继承:主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展。
多态:指在一个类中定义的属性和方法被其它类继承后,它们可以具有不同的数据类型或表现出不同的行为。
类是对某一类事物的抽象描述,是对象的模板
对象用于表示现实中事物的个体,是类的实例
3、成员函数是如何区分不同对象的?
成员函数中会包含this指针,如编译后成员函数set_wheels()的形式如下所示:
void Car::set_wheels(int n, Car *this) { this->m_nWheels = n; }this指针是C++实现封装的一种机制,它将对象和该对象调用的成员函数连接在一起,使得从外部看来,每个对象都拥有自己的成员函数,因此,我们可以在函数中使用this指针访问成员变量或调用成员函数。
this指针形式: (*this).成员变量或函数;
this->成员变量或函数;
this指针的作用:在函数中把this指针当参数使用;
从函数中返回,用作返回值;
void Car::set_wheels(int n, Car *this) { this->m_nWheels = n; }
对于带默认参数的构造函数的定义方法及使用有两个注意事项:
1、对于带默认参数值的构造函数来说,需要防止调用的二义性。
2、构造函数中若第n个参数有默认值,则其后的所有参数都应该有默认值,若构造函数定义为如下内容,则编译出错:
Car(string con_carname = "my car name", int con_seats);
上述代码中,第一个参数有默认值,则后续所有参数均应该有默认值。
脚下留心:类中定义构造函数后,编译器不再提供默认构造函数
只要类中定义了一个构造函数,C++将不再提供默认的构造函数。如果在类中定义的是带参数的构造函数,创建对象时想使用不带参数的构造函数,则需要再实现一个无参的构造函数,否则编译出错
定义析构函数的要求:
1、函数的名称是在构造函数名称之前添加“~”;
2、函数没有参数;
3、函数中不能通过return语句返回一个值;
4、一个类中只能有一个析构函数,不可重载;
浅拷贝:拷贝构造函数中若只完成数据成员本身的赋值,称为“浅拷贝”。
深拷贝:这种将所有数据都进行复制的拷贝构造函数称之为“深拷贝”。
使用友元函数有以下几点需要注意:
1、友元函数是能访问类中所有成员的函数,一个函数可以是多个类的友元函数,只需在各个类中分别说明。
2、C++中不允许将构造函数、析构函数和虚函数声明为友元函数。
