class CTest //声明一个类类名为Ctest { private: /*类的私有变量*/ int *x,*y;//x是个指针 /* data */ public: /*类的公有变量*/ int Add(int a, int b);//增加自写函数 //Ctest是与类名同名的构造函数里面可传参数也可以不传默认是不传参数一个类可有多个构造函数 CTest();//声明类的构造方法什么叫构造就是类初始创建开始调用的时候就会调用到这个方法与类名一致 CTest(int x,int y); ~CTest();//声明类的析构函数//类在被释放的时候就会调用析构函数取反符号 }; //实现类Add的方法 int CTest::Add(int a, int b) { return a b; }调用类的成员函数只有2 种方式1指针调用用-箭头适用于对象指针、new 出来的对象2对象直接调用用.点号适用于栈对象、普通对象变量本来输出结果是但为什么我的输出结果是class demo111类的构造方法p50a3,b4111类的构造方法obj10222类的析构方法是因为写了两个超级危险的错误无参构造函数里没有给 x、y 分配内存*析构函数里直接x 0对野指针赋值直接崩溃下面代码已修正正确输出为class demo111类的构造方法p50a3,b4111类的构造方法obj10222类的析构方法222类的析构方法222类的析构方法最后有3个是因为栈对象objCTest生命周期结束自动销毁 → 自动调用析构#include demo.h #include stdio.h #include string.h #include iostream #include sstream #include windows.h // 必须加 #include unistd.h using namespace std; class CTest //声明一个类类名为CTest { private: /*类的私有变量*/ int *x,*y;//x是个指针 /* data */ public: /*类的公有变量*/ int Add(int a, int b);//增加自写函数 //Ctest是与类名同名的构造函数里面可传参数也可以不传默认是不传参数一个类可有多个构造函数 CTest();//声明类的构造方法什么叫构造就是类初始创建开始调用的时候就会调用到这个方法与类名一致 CTest(int x,int y); ~CTest();//声明类的析构函数//类在被释放的时候就会调用析构函数取反符号 }; //实现类Add的方法 int CTest::Add(int a, int b) { return a b; } //类的构造方法无参构造函数 CTest::CTest() { printf(111类的构造方法\n); //无参构造也要给指针初始化 x NULL; // 必须加 y NULL; // 必须加 } //类的构造方法有参构造函数 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; } //类的析构方法 CTest::~CTest() { printf(222类的析构方法\n); //析构时需要把这两个指针里面的内容重置为NULL // *this-x 0; // *this-y 0; //或者直接把地址清除 // 正确写法释放 new 出来的内存 delete this-x; delete this-y; // 释放后置空 this-x NULL; this-y NULL; } int main(int argc,char *argv[]) { printf(class demo\n); //声明类类的对象叫myTest CTest *myTest new CTest(); //声明了一个CTest类的指针myTest111类的构造方法 //创建栈对象自动调用无参构造打印 111。 int result myTest-Add(20,30); printf(p%d\n,result); //p50 // myTest-~CTest(); //222类的析构方法; //这句话不规范析构函数一般不手动调用delete / 离开作用域 自动调用 CTest *myTest1 new CTest(3,4); //a3,b4 CTest objCTest; //声明了一个CTest类的对象;111类的构造方法 //创建栈对象自动调用无参构造打印 111。 int k objCTest.Add(8,2); //obj10 printf(obj%d\n,k); delete myTest; //创建了最好就要销毁;222类的析构方法 delete myTest1; //222类的析构方法 return 0; }