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;