欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-09 09:30:36
...

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;