面向对象编程(OOP)特性
抽象
封装和数据隐藏
多态
继承
代码的可重用性
类规范的组成
类声明:以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口。
类方法定义:描述如何实现类成员函数。
类和结构体最大的区别在于:结构体的默认访问类型是public,而类为private
*如果函数定义位于类声明中,那么函数将自动成为内联函数
*所创建的每一个对象都有自己的存储空间,用于存储其内部变量和类成员;但是同一个类的所有对象共享同一组类方法,即每一种方法只有一个副本。
构造函数
使用构造函数的方法
1.显式调用构造函数
Stock food=Stock("World Cabbage", 250, 1.25);
2.隐式调用构造函数
Stock garment("Furry Mason",50 , 2.5);
new动态分配内存时:
Stock *pstock=new Stock("Furry Mason",50,2.5);
*这条语句创建一个Stock对象,将其初始化为参数提供的值,并将该对象的地址赋给pstock指针,在这种情况下,对象没有名称,但可以使用指针来管理该对象。
默认构造函数
当且仅当没有定义任何构造函数的时候,编译器才会提供默认构造函数,为类定义了构造函数后,程序员就必须为它提供默认构造函数。
定义默认构造函数的方式有两种
1.给已有构造函数所有参数提供默认值
Stock(const string & co="Error", int n=0,double pr=0.0);
2.另一种方式是通过函数重载来定义另一个构造函数——一个没有参数的构造函数
Stock();
*默认构造函数只能有一个
tip:在设计类时,通常应提供对所有类成员做隐式初始化的默认构造函数
析构函数
与构造函数相比,析构函数没有参数
什么时候调用析构函数?
如果创建的是静态存储类对象,则其析构函数将在程序结束时自动被调用。
如果创建的是自动存储类对象,则其析构函数将在程序执行完代码块时(该对象是在其中定义的)自动被调用。
如果对象是通过new创建的,则它将驻留在栈内存或自由存储区中,当使用delete来释放内存时,其析构函数将自动被调用。
*由于在类对象过期时析构函数将自动被调用,因此必须有一个析构函数。如果程序员没有提供析构函数,编译器将隐式地声明一个默认构造函数。
const成员函数
void show() const;
这种语法确保了函数不会修改调用对象。并且只要类方法不修改调用对象,就应将其声明为const
this指针
this指针用来指向调用成员函数的对象,this是对象的地址。