强化练习
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <fstream> using namespace std; class abcd { public: abcd(int a, int b, int c) { _a = a; _b = b; _c = c; printf("abcd() construct, a: %d,b: %d,c: %d n", _a, _b, _c); } ~abcd() { printf("~abcd() construct,a: %d,b: %d,c: %d n", _a, _b, _c); } int geta() { return _a; } private: int _a; int _b; int _c; }; class mye { public: mye() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(100) { cout << "mye()" << endl; } ~mye() { cout << "~mye()" << endl; } mye(const mye & obj) :abcd1(7, 8, 9), abcd2(10, 11, 12), m(100) { printf("myd(const myd & obj) n"); } public: abcd abcd1; //c++编译器不知道如何构造abc1 abcd abcd2; const int m; }; int dothing(mye mye1)//mye1.拷贝构造(main::mye) { printf("dothing() mye1.abc1.a: %d n", mye1.abcd1.geta()); return 0; } int run() { mye mye; dothing(mye); return 0; } int run2() { printf("run2 start.. n"); //abcd(400, 500, 600); //临时对象的⽣命周期 abcd abcd = abcd(100, 200, 300); printf("run2 endn"); return 0; } int main(void) { run2(); return 0; }
强化练习2
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <fstream> using namespace std; //构造中调⽤构造是危险的⾏为 class mytest { public: mytest(int a, int b, int c) { _a = a; _b = b; _c = c; } mytest(int a, int b) { _a = a; _b = b; mytest(a, b, 100);//创建一个匿名对象 // } ~mytest() { printf("mytest~: %d, %d, %dn", _a, _b, _c); } int getc() { return _c; } void setc(int val) { _c = val; } private: int _a; int _b; int _c; }; int main() { mytest t1(1, 2); printf("c: %dn", t1.getc()); //请问c的值是? return 0; }
- 对象的动态构造和释放
- malloc free函数,new delete 操作符号
- 分配基础类型 、分配数组类型、分配对象
- new和malloc 深入分析,混用测试、异同比较
- 匿名对象生命周期
- malloc free函数,new delete 操作符号
- 分配基础类型 、分配数组类型、分配对象
- new和malloc 深入分析,混用测试、异同比较
- 匿名对象总结
- 匿名对象生命周期
- 匿名对象去和留
- 构造中调用构造
- 匿名对象去和留
- 构造中调用构造
- 静态成员变量和静态成员函数(属于类,语法)
new和delete
c与c++的比较
#define _crt_secure_no_warnings #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <fstream> using namespace std; class test { public: test() { cout << "test()" << endl; m_a = 0; m_b = 0; } test(int a, int b) { cout << "test(int, int)" << endl; m_a = a; m_b = b; } void printt() { cout << "printt:"<<m_a<<","<<m_b << endl; } ~test() { cout << "~test()" << endl; } private: int m_a; int m_b; }; //c语言中 void test1() { int *p = (int *)malloc(sizeof(int)); *p = 10; if (p != null) { free(p); //delete p; p = null; } int *array_p = (int *)malloc(sizeof(int)* 10); for (int i = 0; i < 10; i++) { array_p[i] = i + 1; } for (int i = 0; i < 10; i++) { printf("%d ", array_p[i]); } printf("n"); if (array_p != null) { free(array_p); array_p = null; } cout << "==============" << endl; test *tp = (test*)malloc(sizeof(test)); tp->printt(); if (tp != null) { free(tp); tp = null; } } //malloc free 是函数,标准库,stdlib.h //new 在堆上初始化一个对象的时候,会触发对象的构造函数。malloc不能 //free并不能触发一个对象的析构函数。 //c++中 void test2() { int *p = new int; *p = 10; if (p != null) { free(p); p = null; } int *array_p = new int[10]; for (int i = 0; i < 10; i++) { array_p[i] = i + 1; } for (int i = 0; i < 10; i++) { cout << array_p[i]<<" "; } cout << endl; if (array_p != null) { delete [] array_p; } cout << "==========" << endl; //test *tp = new test(10, 20);//触发有参构造 test *tp = new test;//触发无惨构造 tp->printt(); if (tp != null) { delete tp; tp = null; } } int main(void) { test1(); cout << "-----------" << endl; test2(); return 0; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/600631.html