1.C++类的使用;2.C++类的构造与析构函数;

张开发
2026/4/17 21:51:45 15 分钟阅读

分享文章

1.C++类的使用;2.C++类的构造与析构函数;
1.C类的使用类要独立占用一个文件在本操作中未作此分组class自动创建以本文件名demo_test为名的类类名会和文件名一致或者写成Cdemo_test也行要修改类型那对应的构造函数以及拆构函数的名字都要改声明类要有class关键字构造方法 构造函数完全一样析构方法 析构函数完全一样class Ctest //声明一个类类名为Ctest { private: /*类的私有变量*/ /* data */ public: /*类的公有变量*/ //Ctest是与类名同名的构造函数里面可传参数也可以不传默认是不传参数一个类可有多个构造函数 Ctest();//声明类的构造方法什么叫构造就是类初始创建开始调用的时候就会调用到这个方法与类名一致 ~Ctest();//声明类的析构函数//类在被释放的时候就会调用析构函数取反符号 }; //类的构造方法 Ctest::Ctest() { printf(111类的构造方法\n); } //类的构造方法 Ctest::~Ctest() { printf(222类的构造方法\n); } int main(int argc,char *argv[]) { printf(class demo\n); Ctest *myTest new Ctest();//111类的构造方法 //声明类类的对象叫myTest myTest-~Ctest(); //222类的构造方法 myTest-~Ctest(); //222类的构造方法 delete myTest; //222类的构造方法 return 0; }2.C类的构造与析构函数可以在类里面添加自己的功能方法以及使用方法或者类的私有变量公有变量class CTest //声明一个类类名为Ctest { private: /*类的私有变量*/ int *x,*y;//x是个指针 /* data */ public: /*类的公有变量*/ //Ctest是与类名同名的构造函数里面可传参数也可以不传默认是不传参数一个类可有多个构造函数 CTest();//声明类的构造方法什么叫构造就是类初始创建开始调用的时候就会调用到这个方法与类名一致 CTest(int x,int y); ~CTest();//声明类的析构函数//类在被释放的时候就会调用析构函数取反符号 }; //类的构造方法 CTest::CTest() { printf(111类的构造方法\n); } CTest::CTest(int x,int y)//既然是指针那这儿传进来的就是地址 { printf(x%d,y%d\n,x,y); this-x new int;//给指针x先分配一个内存 *this-x x;//将指针所指向的内存地址的内容进行修改成为传进来的x this-y new int; *this-y y; } //类的析构方法 CTest::~CTest() { printf(222类的析构方法\n); //析构时需要把这两个指针里面的内容重置为NULL *this-x NULL; *this-y NULL; //或者直接把地址清除 this-x NULL; this-y NULL; } int main(int argc,char *argv[]) { printf(class demo\n); CTest *myTest new CTest();//111类的构造方法 //声明类类的对象叫myTest myTest-~CTest(); //222类的析构方法 CTest *myTest1 new CTest(3,4); //x3,y4 delete myTest1; //222类的析构方法 return 0; }1. 构造函数Constructor理解对象出生时调用用来初始化名字和类名一模一样没有返回值连 void 都不用写创建对象时自动调用作用给成员变量赋值、申请资源、初始化一句话构造 生 初始化class Person { public: // 构造函数 Person() { cout 对象出生了初始化 endl; } }; int main() { Person p; // 自动调用构造函数 }2. 析构函数Destructor理解对象死时调用用来释放资源名字~ 类名没有返回值、没有参数对象销毁时离开作用域、delete自动调用作用释放内存、关闭文件、释放锁…一句话析构 死 清理垃圾class Person { public: Person() { } // 构造 // 析构函数 ~Person() { cout 对象要死了清理资源 endl; } };3. 最简单记忆构造函数对象诞生 → 初始化析构函数对象死亡 → 清理资源构造是开门、布置房间析构是关门、打扫卫生走人。构造函数类同名无返回值对象创建时自动调用负责初始化。析构函数~ 类名无参无返回值对象销毁时自动调用负责释放资源。class CTest //声明一个类类名为Ctest { private: /*类的私有变量*/ int *x,*y;//x是个指针 /* data */ public: /*类的公有变量*/ //Ctest是与类名同名的构造函数里面可传参数也可以不传默认是不传参数一个类可有多个构造函数 CTest();//声明类的构造方法什么叫构造就是类初始创建开始调用的时候就会调用到这个方法与类名一致 CTest(int x,int y); ~CTest();//声明类的析构函数//类在被释放的时候就会调用析构函数取反符号 }; //类的构造方法 CTest::CTest() { printf(111类的构造方法\n); } CTest::CTest(int a,int b)//既然是指针那这儿传进来的就是地址 { printf(a%d,b%d\n,a,b); this-x new int;//给指针x先分配一个内存 *this-x a;//将指针所指向的内存地址的内容进行修改成为传进来的x this-y new int; *this-y b; } this 不是你创建的是编译器自动给每个成员函数送的隐藏参数 this 就是 “当前对象自己的地址” 构造函数运行时this 已经存在了 你这段代码的意思 给对象里的两个指针成员分配堆内存并赋值。 //类的析构方法 CTest::~CTest() { printf(222类的析构方法\n); //析构时需要把这两个指针里面的内容重置为NULL *this-x NULL; *this-y NULL; //或者直接把地址清除 this-x NULL; this-y NULL; } int main(int argc,char *argv[]) { printf(class demo\n); CTest *myTest new CTest(); //111类的构造方法 //声明类类的对象叫myTest myTest-~CTest(); //222类的析构方法 CTest *myTest1 new CTest(3,4); //x3,y4 delete myTest1; //222类的析构方法 return 0; }1. this 是什么最简单解释 this 当前对象自己的地址 只要你进入类的成员函数包括构造函数 编译器会偷偷传一个隐藏参数类名 *const this 这个 this 就代表 “我现在这个对象自己” 比如你写 CTest obj(10, 20); 调用构造函数时编译器偷偷帮你做了这件事 CTest::CTest(CTest *const this, int x, int y) 所以this 永远指向当前对象不需要你创建系统自动给 2.构造函数逐行解释 CTest::CTest(int x,int y) { // 打印传入的 x10y20 printf(x%d,y%d\n,x,y); // this-x 是类里的指针成员 int *x; this-x new int; // 给指针分配 4 字节堆内存 // *this-x 代表“指针指向的内存” *this-x x; // 把传进来的值 10 放进去 this-y new int; // 同理 *this-y y; }真正含义this-x对象里面的指针变量new int在堆上申请一块 int 内存*this-x访问指针指向的那块内存一句话构造函数里用 this给对象内部的指针分配堆空间并赋值。3. 关键问题还没创建对象this 能使用吗绝对能而且必须能用你要记住对象创建的真实顺序系统先分配对象内存 → this 就有了然后进入构造函数最后对象才算创建完成所以进入构造函数的那一刻this 已经存在了你不是 “未创建 this”而是this 由系统在进入函数前就创建好了。4. 最形象的比喻对象 房子this 房子的地址构造函数 装修房子this-x new int 给房子里的柜子买个盒子放东西装修构造函数开始时房子对象内存已经建好地址this已经有了。

更多文章