avatar

松果工作室

欢迎光临

  • 首页
  • freeRTOS
  • ESP
  • 开发手册
  • 快速笔记
  • 个人收藏
  • 工具
Home 类和对象
文章

类和对象

Posted 2023-11-19 Updated 2023-11- 25
By YCP
17~22 min read

基本形式

#include <cstdio>

class Rectangle {
private:
		int leng;
		int wide;
protected:
public:
		int _area() const;
		void set(int len, int wid);
};

int Rectangle::_area() const {
	return leng * wide;
}

void Rectangle::set(int len, int wid) {
	leng = len;
	wide = wid;
}

int main() {
	Rectangle Square{};
	Square.set(5, 5);

	printf("%d\r\n", Square._area());
	return 0;
}

成员变量、成员函数、类访问修饰符

  • 成员函数不会修改成员变量时,将其声明为 const
  • 默认情况下成员会被定义为 private
  • 成员变量建议设为private,用公有成员函数来访问和修改这些成员变量
  • 使用大括号初始化对象在现代编译器中更被推荐

构造函数、析构函数

  • 构造函数一般用于初始化,将 len 传入成员变量 leng,可以看到传入的参数可以和成员变量一样,构造函数每创建一个对象都会调用一次。
Rectangle::Rectangle(int len,int wid,int size):leng(len),wide(wid),size(size) {
  data = new int[size];
}
  • 析构函数主要执行清理工作,并且禁止传参,清理指的是在最后一个函数调用后的自动执行
Rectangle::~Rectangle() {
	delete[] data;
}

this 指针

  • 允许传入参数与成员变量同名,大概是为了看起来好看点。但实际上这样会发生警告。
void Rectangle::set(int leng, int wide) {
	this->leng = leng;
	this->wide = wide;
}

指向类的指针

  • 用类声明一个指针
  • 对象地址传入指针
  • 指针访问成员函数
  • 不知道有什么用
Rectangle *pt;
pt = &Square;
printf("%d\r\n",pt->_area())

静态成员

静态成员归属于类而不属于对象。因此访问静态变量时候形如Rectangle::objectCount
下面是本文的代码,包含了类和对象的所有知识。

#include <cstdio>

class Rectangle {
private:
		int leng;
		int wide;
		int * data;
		int size;
protected:
public:
		/** 静态成员*/
		static int objectCount;
		static void statictest(){ printf("静态成员函数测试\r\n");}

		Rectangle(int len,int wid,int size);///构造函数
		~Rectangle();///析构函数
		int _area() const;
		void set(int len, int wid);
};

/** 构造函数*/
Rectangle::Rectangle(int len,int wid,int size):leng(len),wide(wid),size(size) {
	data = new int[size];
	objectCount++;
	printf("Create %d\r\n",objectCount);
}

/** 析构函数*/
Rectangle::~Rectangle() {
	delete[] data;
	printf("Delete %d\r\n",objectCount);
}

int Rectangle::_area() const {
	return leng * wide;
}

void Rectangle::set(int len, int wid) {
	this->leng = len;
	this->wide = wid;
}
///静态成员变量初始化
int Rectangle::objectCount = 0;
int main() {

	Rectangle Square(5,5,5);
	Rectangle Rectangle_(5,9,5);
	Square.set(5, 5);

	Rectangle *pt;
	pt = &Square;

	printf("对象的方法调用:%d 指向类的指针:%d 静态成员变量:%d\r\n", Square._area(),pt->_area(),Rectangle::objectCount);
	Rectangle::statictest();
	return 0;
}

打印结果:

Create 1
Create 2
对象的方法调用:25 指向类的指针:25 静态成员变量:2
静态成员函数测试
Delete 2
Delete 2
CPP 面向对象
Others
License:  CC BY 4.0
Share

Further Reading

Nov 19, 2023

类和对象

基本形式 #include <cstdio> class Rectangle { private: int leng; int wide; protected: public:

Nov 18, 2023

CPP 面向对象大纲

类和对象 重载运算符和重载函数 继承 多态 抽象 封装

OLDER

消息队列(Queue)

NEWER

软件定时器(Software Timer)

Recently Updated

  • ESP32(八) 简单的webserver
  • ESP32(七) NVS
  • ESP32(四) STA & AP
  • 多级菜单
  • ESP32(五) ESP32 OTA

Trending Tags

WCH Linux Elec freeRTOS STM ESP Flutter Others SwiftUI

Contents

©2025 松果工作室. Some rights reserved.

Using the Halo theme Chirpy