C++ Primer Plus学习笔记(七)对象和类

1. 基本用法

1.1 基本介绍

类包括数据成员和成员函数(方法)两种,对象是类的具体化,比如int a,类似转化为 类 对象。使用类对象的程序都可以直接访问公共成员函数,但只有通过公共成员函数(或友元函数)才可以访问对象的私有成员,从而完成数据隐藏。
注:在创建对象之前不能给类分配内存。比如要创建类里面的常量,如下使用:

class Item
{
    int MAX=12;//错误,因为创建对象之前没有内存
}

正确方法为采用枚举变量。

class Item
{
    enum {MAX=12};
}

另一种方法为采用static关键字

class Item
{
    static int MAX = 12'
}

1.2 类的构成

成员函数

首先在类定义里面声明成员函数,进而对其方法实现进行说明,使用::标识符。通常将类定义放在头文件中,将其实现(类方法的代码)放在源代码中

构造函数

构造函数与类同名,编译器会默认提供不带任何参数的构造函数,前提是程序没有定义构造函数,如果程序提供非默认狗杂函数,则必须手动提供默认构造函数。默认构造函数定义有两种,如下

stock(int a = 1, int b = 2, char c = 'a');//stock,为所有参数提供默认值
stock();//函数重载定义另一个构造函数

构造函数逇调用分为显式和隐式两种。

Stock food = Stock("test",250);//显式
Stock food("test",250);//隐式
//这两种方式也是对象初始化的两种方式,
//此外C++11还提供了花括号{}的初始化方式 Stock food = {"test",250}; Stock food{"test",250}

析构函数

析构函数在对象销毁时调用,其名称为类的名称前面加一个~,如果构造函数使用new分配内存,则析构函数必须使用delete删除。其他情况下,析构函数没有完成实质性工作,如下:

Stock
{
    ~Stock();
}
Stock::~Stock()
{
}

1.3 类的使用说明

使用头文件定义类、资源文件说明方法实现的方式。需要借助之前的头文件知识完成相应任务。

//创建stack头文件
#ifndef STACk_H_
#define STACK_H_
typedef unsigned int Item;
class Stack {
private:
    enum { MAX = 3 };
    Item items[MAX];
    int top;
public:
    Stack();
    bool isEmpty();
    bool isFull();
    bool push(const Item & item);
    bool pop(Item & item);
};
#endif
//方法实现
#include "stack.h"
Stack::Stack() {
    top = 0;
}
bool Stack::isEmpty() {
    return top == 0;
}
bool Stack::isFull() {
    return top >= MAX;
}
bool Stack::pop(Item & item) {
    if (!isEmpty())
    {
        item = items[top--];
        return true;

    }
    return false;
}
bool Stack::push(const Item & item) {
    if (!isFull())
    {
        items[++top] = item;
        return true;
    }
    return false;
}
//类的使用
#include <iostream>
#include "stack.h"
int main()
{
    using namespace std;
    Stack Stack1;
    cout << "栈是否为空:" << Stack1.isEmpty() << endl;
    Item t1;
    Stack1.push(1);
    Stack1.push(2);
    Stack1.pop(t1);
    Stack1.push(3);
    cout << "栈是否为满:" << Stack1.isFull() << endl;
    Stack1.push(4);
    cout << "栈是否为满:" << Stack1.isFull() << endl;
    return 0;

}

2. this指针

this指针指向用来调用成员函数的对象,类似于指针地址指向某个对象,若要返回对象本身,则使用*this.

3. const成员函数

要使成员函数不修改对象本身,不能使用传统意义上的 const+变量,因为方法可能没有参数,正确打开途径为:

void show() const;

猜你喜欢

转载自blog.csdn.net/yanrong1095/article/details/82432026