13.class类的定义、宏定义、条件编译、构造函数和析构函数
- 类的定义
- 宏定义
- 条件编译
- 构造函数
- 析构函数
类的定义
面向对象的程序设计算法
语法:
class 名{ public: 语句; praivate: 语句; protected: 语句; }
public:公有: 可以在外部引用,也可以直接访问到praivate;
praivate: 私有:只能在内部访问到数据;语句没有申明在哪个praivate
protected:保护:与praivate的功能相同
类在VS中的应用
1、点击源文件,右键新建项、选择c++类
2、include “头文件.h” // 调用自己定义的头文件
.cpp文件用于函数的逻辑,.h文件用于数据属性的申明
#include "clist.h" #include <iostream> using namespace std; class clist { int a; public: void input(int a); }; void clist::input(int a) { cout << a << endl; } int main() { clist fg; fg.input(4); }
输出结果为4
宏定义
语法
#define 表示符 字符串
eg:
#define M(y) (y*y+y+3) int main() { int b = M(1) * 2; cout << b << endl; }
输出10;
条件编译
语法:
#ifdef UNICODE // 在Unicode字符集环境下 typedef wchar_t PPCHAR; #else // 不在Unicode字符集环境下 typedef char PPCHAR; #endif
ifndef的使用
主要可以防止重定义,
#ifndef _PLAY_H_ #define _PLAY_H_ class Playeer { private: int num; }; #endif // !_PLAY_H_
相同效果,类似#progma once
#pragma once class Playeer { private: int num; };
构造函数
构造函数明与类同名,没有定义构造函数时会自动定义一个函数
语法:
class clist { int a; char *name; public: clist():a(0),name(nullptr){} // 构造函数初始化 clist(int a, char ename[20]) // 构造函数进行数据赋值 { this->a = a; name = new char[20]; for (int i = 0; i < 20; i++) {name[i] = ename[i];}} };
析构函数
析构函数与类同名,但有前缀~,用于释放构造函数的内存
语法:
#pragma once class clist { int a; char *name; public: clist():a(0),name(){} // 初始化 clist(int a, char ename[20]) // 进行数据赋值 { this->a = a; name = new char[20]; for (int i = 0; i < 20; i++) { name[i] = ename[i]; } } ~clist() // 析构函数 { delete[]name; // 释放内存 name = nullptr;}};