类和对象
基本形式
#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 = □
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 = □
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
License:
CC BY 4.0