::
作用域限定符 / 作用域运算符
对象的声明方式
class 类名 对象名
类名 对象名
写代码时要注意
- 限制访问权限
- 将接口与实现分离
一般将类的声明放在指定头文件中,将类成员函数放在另一个文件中
student.h中的代码
class CStudent {
public :
void display() ;
private :
int num;
char name[20] ; .
int age;
};
student.cpp中的代码
#include<iostream>
#include "student.h" //这里需要include这个头文件,否则无法找到Student类
using namespace std;
void CStudent: :display() { //这里要注明是Student类的
cout<< "num: "<<num<<endl ;
cout<< "name: "<<name<<end1 ;
cout<<"age: "<<age<<endl ;
}
main.cpp中的代码
#include<iostream>
#include "student.h" //注意这里是双引号
int main() {
CStudent stu1; //定义stul对象
stu1.display(); //指向stul对象的成员函数
return 0;
}
感觉和大二的时候写的stm32很像hhh,虽然当时没有用到类,是函数接口与实现的分离.

构造函数
- 构造函数的重载
class Rectangle {
public:
Rectangle();
Rectangle(int h, int w):height(h), width(w) {} 构造函数的重载
int square(int h, int w){}
private:
int height, width;
}
Rectangle(int h = 5, int w = 4); 在声明构造函数时指定默认参数
- 若在声明是指定默认参数了,在定义时可以不用指定默认参数了(如果声明和定义不在一块的话)
-
若指定了全部的默认参数,就不能再定义重载的构造函数了
析构函数
1.如果在函数中定义了一个对象,当这个函数调用结束时,对象会被释放,且在对象
释放前会自动执行析构函数。
2.static局部对象在丽数调用结束时对象不释放,所以也不执行析构函数,只有在
main函数结束或调用exit 函数结束程序时,才调用static局部对象的析构函数。
3.全局对象则是在程序流程离开其作用域(如main函数结束或调用exit函数)时,才
会执行该全局对象的析构函数。
4.用new建立的对象,用delete释放该对象时,会调用该对象的析构函数。
类的静态成员
- 所有该类对象的静态数据成员都有单一存储空间
- 静态数据成员必须在类外定义与初始化
- C++静态数据成员被该类的所有对象共享,包括派生类的对象
- 静态和常量有区别

静态成员函数
在类中声明函数前加static 关键字为静态成员函数
static int volume();
- 静态成员函数是类的一部分,而非对象的一部分.
Box::volume();
Box a;
a.volume(); 用了a的类型而并不表示函数属于对象a
可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,
而静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。
拓展参考
https://zhuanlan.zhihu.com/p/104193620
https://blog.csdn.net/majianfei1023/article/details/45290467
- 如果对同一个类定义了是个对象,这些对象的成员函数对应同一个函数代码段
- this指针在成员函数中.哪个对象调用,就把哪个对象的起始地址赋给this.
this指针的特点
(1)只能在成员函数中使用,在全局函数、静态成员函数中都不能使用this。
(2)this指针是在成员函数的开始前构造,并在成员函数的结束后清除。
(3) this 指针会因编译器不同而有不同的存储位置,可能是栈、寄存器或全局变量。
(4) this是类的指针。
(5)因为this指针只有在成员函数中才有定义,所以获得-一个对象后,不能通过对象使
用this指针,所以也就无法知道一一个对象的this指针的位置。不过,可以在成员函数中指定
this指针的位置。
(6)普通的类函数(不论是非静态成员函数,还是静态成员函数)都不会创建一-个函数
表来保存函数指针,只有虚函数才会被放到函数表中。
类模板
template <class 类型参数名>
析构函数和构造函数的执行顺序
定义两个对象,先定义的对象后调用析构函数.
(1)在全局范围中定义的对象(即在所有函数之外定义的对象),它的构造函数在文件中的所有函数(包括main函数)执行之前调用。但如果- -个程序中有多个文件,而不同的文件中都定义了全局对象,则这些对象的构造函数的执行顺序是不确定的。当main函数执行完毕或调用exit函数时(此时程序终止),调用析构函数。
(2)如果定义的是局部自动对象(如在函数中定义对象),则在建立对象时调用其构造函数。如果函数被多次调用,则在每次建立对象时都要调用构造函数。在函数调用结束、对象释放时先调用析构函数。
(3)如果在函数中定义静态(static)局部对象,则只在程序第一次 调用此函数建立对象时调用构造函数一次, 在调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用析构函数。例如,在-一个函数中定义了以下两个对象:
继承与派生

越来越严格的访问属性
网友评论