当前位置: 首页 > news >正文

新手学做网站难吗外包服务商

新手学做网站难吗,外包服务商,京东自营商城官网,郑州网站优化公司哪家好文章目录 类六个默认存在的成员函数构造函数#xff1a;析构函数#xff1a;拷贝构造函数:拷贝构造详解及细节#xff1a; 赋值运算符重载;取地址及const取地址操作符重载const修饰的含义#xff1a; 类六个默认存在的成员函数 构造函数 析构函数 拷贝构造函数 赋值运算… 文章目录 类六个默认存在的成员函数构造函数析构函数拷贝构造函数:拷贝构造详解及细节 赋值运算符重载;取地址及const取地址操作符重载const修饰的含义 类六个默认存在的成员函数 构造函数 析构函数 拷贝构造函数 赋值运算符重载 const成员函数 取地址及const取地址操作符重载 **一个类中不管存不存在成员变量和成员函数其内部都会默认生成以上六个成员函数 ** 构造函数 ​ 在一个类中如果没有自定义任何构造函数会自动生成一个默认的无参构造函数其没有任何功能。如果自己定义过一次构造函数则不会生成默认构造函数如果我们定义的不是无参构造方法以后就不可再使用无参构造了当然我们可以在定义出来一个无参构造函数。构造函数的格式 类名(参数列表){操作}… ​ 构造函数还有个点就是当一个类包含另一个类的时候默认构造函数会默认调用被包含类的默认构造函数 析构函数 ​ 析构函数的作用和构造函数是相反的构造函数的作用是初始化类成员变量析构函数的作用就是当对象使用完了以后需要销毁的时候对内部的数据结构进行释放操作 格式 ~类名(){成员变量释放操作} 举个例子数组栈的C实现方法 //File:Stack.h #includeiostream using namespace std; class Stack { private:int* arr;int capcity;int top;bool CheckMemory(); public:Stack();~Stack();Stack(const Stack s);void PushBack(int n);int TopStack();void PopStack();bool isEmpty(); };//File:Stack.cpp #includeStack.h Stack::Stack() {capcity 4;top -1;int* temp (int*)malloc(sizeof(int) * capcity);if (temp nullptr) {perror(malloc fail);exit(-1);}arr temp; } Stack::~Stack(){free(arr);capcitytop 0; } Stack::Stack(const Stack s) {this-capcity s.capcity;this-top s.top;//deepin copyint* temp (int*)malloc(sizeof(int) * s.capcity);if (temp nullptr) {perror(copy fail);exit(-1);}this-arr temp;memcpy(arr, s.arr, sizeof(int) * capcity); } void Stack::PushBack(int n) {if (CheckMemory()) {//扩容int* temp(int*)realloc(arr, sizeof(int) * capcity * 2);if (temp nullptr) {perror(realloc fail);exit(-1);}arr temp;capcity * 2;}arr[top] n; } int Stack::TopStack() {return arr[top]; } void Stack::PopStack() {top--; } bool Stack::CheckMemory() {return top capcity - 1;//ture is full,false isnt full } bool Stack::isEmpty(){return top -1; }拷贝构造函数: 拷贝构造就有意思了在开始讲解之前我先用一段代码提问下大家 class demo { private:int _a; public:demo() {_a 1;cout demo() endl;}~demo(){cout ~demo() endl;}demo(const demo d) {_a d._a;cout demo(const demo d) endl;} }; int main() {demo d1;demo d2d1;return 0; }我想问下大家这个main函数里的d2d1 是进行的赋值操作还是进行的拷贝构造的操作 答案 显然这里进行的是拷贝复制这里我们将讲解下这是怎么回事以及为什么这里的拷贝构造函数为什么要传引用变量 拷贝构造详解及细节 1. 首先由C的规定我们在对一个并未初始化的类进行值传递的时候调用的就是拷贝构造函数而不是赋值函数这就很简单的解决了这里为什么调用的是拷贝构造函数的问题。 **2.第二个令人感到困惑的点就是拷贝构造函数我们传递的是引用数据类型首先也有个硬性规定这里传递的必须是指针另外这也是为了和第一点的特性做自洽处理因为我们如果值传递话会陷入一种无穷递归的情况每次传值都会进行一次拷贝调用每次拷贝调用也会触发值传递。这里没有任何方法可以控制因为这个递归他不会进入到函数每部除非栈空间耗尽不然他会一直递归 ** 3. 拷贝构造在遇到成员变量也是一个类的时候也会调用被包含类的默认构造函数进行拷贝操作 4. 深浅拷贝问题其实我们大多数时候默认的拷贝构造只会完成浅拷贝这就会导致一个问题两个类的指针成员函数都指向一块堆空间这样在对象的生命周期结束时候进行销毁操作在析构函数里会对一片地址重复释放这样会直接引起程序的崩溃 赋值运算符重载; 其实赋值运算符重载的注意事项和拷贝构造函数的注意点最重要的就是深浅拷贝的问题不同的情况要灵活运用还有一个重要的就是赋值操作运算符重载只能在类的内部进行定义不能定义为全局函数其实这也很好理解因为如果我们不在类内定义的话编译器会自动生成一个默认的赋值函数这样会与全局的赋值运算符重载冲突。 取地址及const取地址操作符重载 其余两个默认成员函数其实并不怎么重要了这里我也就不做过多的赘述下边我需要讲一些重要的概念 demo* operator(){return this; }const demo* operator()const { return this ; }const修饰的含义 eg const int a1; int b1; const int ca2; int da2;请各位判断上边代码的对错情况 答案√×√× 这是为什么呢 主要是因为上述代码的右值都是临时变量而临时变量都具有常性而引用临时变量稍有不慎就会造成权限的放大大家自己想一下定义出来的a是存在栈上的还是在常量区。
http://www.w-s-a.com/news/549451/

相关文章:

  • 公司网站建设的项目工作分解结构wordpress插件后端页面
  • 四川省建设人才网站2018南京专业建站
  • ppt制作网站推荐seo教程百度网盘
  • 网站建设多少钱一平米网上商城网站开发报告
  • 福州网站建设招聘信息哈尔滨中企动力科技股份有限公司
  • 军事新闻最新seo关键词查询排名软件
  • 免费网站建设官网项目建设表态发言
  • 平谷建站推广广告投放平台主要有哪些
  • 网站备案掉了什么原因步骤怎么读
  • 徐州市建设监理协会网站做一个公司官网需要多少钱
  • 网站开发学什么数据库做公司网站注意事项
  • 游戏开发网站建设国际战事最新消息
  • 达州+网站建设网站里自己怎么做推广
  • 看网站建设公司的网站案例熊掌号接入wordpress
  • 黄石下陆区建设局网站wordpress如何拖移小工具
  • 宁波网站建设信息网站开发看书
  • 网站建设优化价格北京优化seo排名
  • 微信网站建设公司费用高端网站建设 炫酷
  • 北京网站假设销售找客户最好的app
  • 做外贸需要关注的网站有什么好处宜州设计公司
  • 公司最近想做个网站怎么办陕西科强建设工程有限公司官方网站
  • 生态城门户网站 建设动态it外包收费
  • 网站项目评价老渔哥网站建设公司
  • 哈尔滨寸金网站建设价格178软文网
  • 一个网站建设的成本网站开发过程及要点
  • 监控视频做直播网站中国建筑人才网下载
  • 网站建设公司华网天下买送活动集团网站设计案例
  • 哪些网站比较容易做哪个网站做中高端衣服
  • 做php网站教程wordpress去水印
  • 深圳微网站建设公司哪家好潍坊专业做网站的公司