《C++语言基础》程序阅读——指针、const、static(一)
来源:互联网 发布:数据比例图 编辑:程序博客网 时间:2024/04/29 01:20
重要链接 贺利坚老师教学链接
代码阅读:
代码片段一:
#include <iostream>using namespace std;class base{private: int m;public: base() {}; base(int m){this->m=m;} int get(){return m;} void set(int m){this->m=m;}};//base_end int main(){ base *ptr; ptr=new base[2]; ptr->set(30); ptr=ptr+1; ptr->set(50); base a[2]= {1,9}; cout<<a[0].get()<<","<<a[1].get()<<endl; cout<<ptr->get()<<","; ptr=ptr-1; cout<<ptr->get()<<endl; delete[] ptr; return 0;}
解读main函数:
base *ptr;
只是在栈上开辟一个4字节的空间,用来存放base类型的指针变量ptr
ptr = new base[2];
在堆中开辟base[0]及base[1]两个base类型对象的空间, 并使指针ptr指向base[0]的首地址.同时两个base对象由不带参的默认构造函数生成.
ptr->set(30);
调用 base[0] 的set成员函数,另私有类成员 m = 30
ptr=ptr+1;
另ptr 指向 base[1]对象
ptr->set(50);
调用 base[1] 的set成员函数,另私有类成员 m = 50
//华丽分界线//////////////////重点内容////////////////////////////////////
base a[2]= {1,9};
在栈中开辟两个base类型对象a[0],a[1].其中a[0],a[1]调用重载构造函数base(int m){this->m=m;}
对于这句代码。一开始我也很难想象如何将类对象的赋值转换成构造函数的调用的,直到做实验反汇编后才得出结论。推理过程如下:
main中写测试代码
base b = 2;cout << b.get() <<endl; base c(3);cout <<c.get()<<endl;
显示输出结果是 2 (换行) 3 ,下断,命中断点,查看反汇编代码,发现,对象创建时候调用的构造函数都是同一个构造函数 base(int m){this->m=m;}
于是肯定对类对象直接赋值,会导致调用重载的构造函数。
接下来,对类进行修改
class base{public: base() {}; base(int m, int n) { this->m = m; this->n = n; } int getm() { return m; } int getn() { return n; } void set(int m) { this->m = m; }private: int m; int n;};
新增私有成员函数int n ,以及公有函数 int getm() ,int getn()
main中写测试代码:
base b = 2;
提示出错: 不存在从 int 转换为 base 的构造函数
于是修改
base b = {2,3};
华丽丽的错误消失了,又能调用构造函数了。b.getm(),b.getn() 分别输出 2,3
那对于原来的 base a[2] = {1,9} 又要如何改?
base a[2] = {1,2,3,4}; //错误base a[2] = { {1,2},{3,4}};//正确
OK实验完毕,对于类对象的赋值,需要遵循的规则如上.
//华丽分界线///////////////////结束///////////////////////////////////////////////
cout<<a[0].get()<<","<<a[1].get()<<endl;
调用a[0]对象的get()成员函数,输出1
调用a[1]对象的get()成员函数,输出9
cout<<ptr->get()<<",";
由于ptr指向 base[1] 所以输出 50
ptr=p -1;
另ptr 指回 ptr[0] 对象
cout<<ptr->get()<<endl;
输出 30
delete[] ptr;
由于 ptr 是在堆上分配,所以使用完要删除,释放内存,否则造成内存泄漏
- 《C++语言基础》程序阅读——指针、const、static
- 《C++语言基础》程序阅读——指针、const、static(一)
- 《C++语言基础》程序阅读——指针、const、static(二)
- 《C++语言基础》实践项目——指针、const、static
- 第5周项目--程序阅读——指针、const、static
- C语言基础程序(一):野指针
- <C语言>特殊指针——const指针、void指针、NULL指针、零指针、野指针
- 程序基础C语言常量(const)参数
- 《C语言及程序设计》程序阅读——数组与指针
- 《C语言及程序设计》程序阅读——二维数组与指针
- 第14周 《C语言及程序设计》程序阅读——数组与指针
- C语言回顾(七、多重指针,argc,argv,动态内存分配,void指针,const)——iOS开发基础
- C语言---const和static
- C语言const、static关键字
- 《C++语言基础》程序阅读——运算符重载(一)
- C语言之知识点总结——const指针
- C语言基础---const常指针的使用
- 《C语言及程序设计》程序阅读——一维数组初步
- 自定义Toast
- MySQL 事务没有提交导致锁等待
- 迭代器
- 列表生成式
- 线程池
- 《C++语言基础》程序阅读——指针、const、static(一)
- C++ sizeof关键字的使用总结
- 粗浅看 Tomcat系统架构分析
- 上传word文档并读取word调用com组件遇到的问题
- Spring和Quarz集成,实现定时任务
- [Android] 自定义顶部标题栏
- IO流中newLine()方法能不能用于字节流中?
- C++走向远洋——67(项目二、洗牌)
- Tensorflow 安装