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

宝安做网站信科做网站和网页有区别吗

宝安做网站信科,做网站和网页有区别吗,邢台做网站公司,网站搭建教学文章目录 类的6个默认成员函数构造函数默认构造函数的用处#xff1a; 析构函数默认析构函数的用处 拷贝构造函数赋值运算符重载取地址及const取地址操作符重载 类的6个默认成员函数 对于一个没有成员的类来说#xff0c;称之为空类#xff1b; 但空类并非完全是空的#… 文章目录 类的6个默认成员函数构造函数默认构造函数的用处 析构函数默认析构函数的用处 拷贝构造函数赋值运算符重载取地址及const取地址操作符重载 类的6个默认成员函数 对于一个没有成员的类来说称之为空类 但空类并非完全是空的类会自动生成6个默认的成员函数 构造函数 概念构造函数是一种特殊的成员函数它在创建对象时被调用用于初始化对象的数据成员。构造函数和类名相同并且没有返回类型甚至不能包含return语句。 class Date { private:int _year;int _month;int _day; public:void Print(){cout _year - _month - _day endl;} }; int main() {Date d1;d1.Print(); }像这种情况我们没有创建一个构造函数编译器会自动调用默认构造函数 产生结果都是随机值 class Date { private:int _year ;int _month;int _day; public://无参构造函数Date(){_year 1;_month 1;_day 1;}//如果没有构造参数编辑器会自动生成一个默认构造参数void Print(){cout _year - _month - _day endl;} }; int main() {Date d1;d1.Print(); }在我们的主程序中我们没有使用我们的构造函数但实际上在我们创建d1对象时编译器就已经开始调用我们的构造函数了 创建类类型对象时由编译器自动调用以保证每个数据成员都有 一个合适的初始值并且在对象整个生命周期内只调用一次。 也可将上面的无参构造参数改为这两种 //全缺省参数构造函数Date(int year 2, int month 2, int day 2){_year year;_month month;_day day;}//普通的构造函数Date(int year, int month, int day){_year year;_month month;_day day;} int main() {//调用带参数的构造函数在创建对象的后面加上...Date d1(2023,10,24); }这些都是构造函数那有什么不同吗 在这里无参的构造函数和全缺省的构造函数都称为默认构造函数并且默认构造函数只能有一个。 当然现在一些编译器也不让存在多个构造函数了 所以如果要自己实现构造参数的话写一个即可 而在C11给出规定C11支持在内置类型变量声明处加上缺省值 我们也可以这么操作。 默认构造函数的用处 C把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的数据类型如int/char…自定义类型就是我们使用class/struct/union等自己定义的类型。 如果类中存在自定义类型的成员可没有办法用过赋予缺省值来进行初始化所以可以通过调用默认构造参数来实现对该类型进行初始化 class Stack { private:int* _a;int _top;int _capacity; public:Stack(int capacity 3){cout Stack(int capacity 3) endl;_a (int*)malloc(sizeof(int) * capacity);if (_a nullptr){perror(Stack Fail);exit(-1);}_top 0;_capacity capacity;}};class MyQuene { private:Stack _PushSta;Stack _PopSta;int _size20; public:void Print(){cout MyQuene Print endl;} };int main() {Stack s1;MyQuene m1;return 0; }析构函数 概念析构函数是一种特殊的成员函数它在对象被销毁时自动调用用于执行清理操作和释放对象所占用的资源。析构函数的名称与类名相同但前面需加上一个波浪线~作为前缀。 注意如果没有明确的定义析构函数编译器会提供一个默认的析构函数。默认析构函数不执行任何清理工作仅释放对象所占内存空间。 class Date { private://C11支持在内置类型变量声明处加上缺省值int _year 1;int _month 1;int _day 1; public:Date(int year 2, int month 2, int day 2){_year year;_month month;_day day;}void Print(){cout _year - _month - _day endl;} //析构函数~Date(){cout ~Date() endl;} }; int main() {Date d1;return 0; }默认析构函数的用处 class Stack { private:int* _a;int _top;int _capacity; public:Stack(int capacity 3){cout Stack(int capacity 3) endl;_a (int*)malloc(sizeof(int) * capacity);if (_a nullptr){perror(Stack Fail);exit(-1);}_top 0;_capacity capacity;}//自定义一个析构函数~Stack(){cout ~Stack() endl;free(_a);_a nullptr;_top _capacity 0;} //默认的析构函数不会释放堆区上的空间需要自己实现对资源的释放};class MyQuene { private:Stack _PushSta;Stack _PopSta;int _size20; public:void Print(){cout MyQuene Print endl;}//让它默认生成析构函数 };int main() {Stack s1;MyQuene m1;return 0; }析构函数会在一个函数内进行栈帧销毁之前将类对象进行析构 拷贝构造函数 概念拷贝构造函数是一种特殊的成员函数用于创建一个新对象并将其初始化为已有对象的副本。只有单个形参该形参是对本类类型对象的引用(一般常用const修饰)在用已存在的类类型对象创建新对象时由编译器自动调用。 特征 拷贝构造函数是构造函数的一个重载形式。 拷贝构造函数的参数只有一个且必须是类类型对象的引用 普通 情况下 class Date { private:int _year;int _month;int _day; public:Date(int year 2, int month 2, int day 2){_year year;_month month;_day day;}void Print(){cout _year - _month - _day endl;}~Date(){cout ~Date() endl;}void Func(Date d){d.Print();} };class Stack { private:int* _a;int _top;int _capacity; public:Stack(int capacity 3){cout Stack(int capacity 3) endl;_a (int*)malloc(sizeof(int) * capacity);if (_a nullptr){perror(Stack Fail);exit(-1);}_top 0;_capacity capacity;}//自定义一个析构函数~Stack(){cout ~Stack() endl;free(_a);_a nullptr;_top _capacity 0;}void Print(){cout Stack endl;}void Func(Stack* s){s-Print();}}; class MyQuene { private:Stack _PushSta;Stack _PopSta;int _size20; public:void Print(){cout MyQuene Print endl;}//让它默认生成析构函数 };int main() {Date d1(2023,10,22);d1.Func(d1);Stack s1;s1.Func(s1); }原因 所以这里就有了拷贝构造函数这一函数 写法 Date(const Date d){cout Date(Date d) endl;_year d._year;_month d._month;_day d._day;}Stack(Stack s){cout Stack(Stack s) endl;_a (int*)malloc(sizeof(int) * s._capacity);if (_a nullptr){perror(Stack Fail);exit(-1);}_top s._top;_capacity s._capacity;} int main() {Stack s1;s1.Func(s1);MyQuene q1;MyQuene q2(q1); } 由于d1对象已存在所以对于形参d来说就会自动调用拷贝构造函数 注意 测试 Date Test(Date d) {Date dd(d);return dd; }赋值运算符重载 概念C为了增强代码的可读性引入了运算符重载运算符重载是具有特殊函数名的函数也具有其返回值类型函数名字以及参数列表其返回值类型与参数列表与普通的函数类似。针对自定义类型 函数名字为关键字operator后面接需要重载的运算符符号。 函数原型返回值类型 operator操作符(参数列表) 注意 不能通过连接其他符号来创建新的操作符比如operator 重载操作符必须有一个类类型参数 用于内置类型的运算符其含义不能改变例如内置的整型不 能改变其含义 作为类成员函数重载时其形参看起来比操作数数目少1因为成员函数的第一个参数为隐藏的this 在Date类中写 //域内有一个隐藏的this指针所以把第一个参数看作是this指针所指向的bool operator(const Date y){if (_year y._year){return true;}else if (_year y._year _month y._month){return true;}else if (_year y._year _month y._month _day y._day){return true;}return false;}测试 Date d1;Date d2(2023, 10, 22);cout (operator(d1, d2)) endl;//可以简写cout (d1 d2) endl;d1被看作是this指针指向的对象在写运算符重载函数时可以省略第一个比较参数 在实际上的比较操作时可以像内置类型一样直接使用运算符来进行比较 对于赋值运算符重载他是有默认函数的也就是以值的方式逐字节拷贝 默认情况下 自己实现情况下 //引用提高效率由于主函数会有一个类对象来进行赋值所以对象是存在的Date operator(const Date y){if (this ! y)//如果是类对象对自己赋值这种情况没必要{_year y._year;_month y._month;_day y._day;}return *this;}赋值运算符只能重载成类的成员函数不能重载成全局函数 像这种赋值运算对于一般情况都是可以使用默认的赋值重载的但如果类成员函数涉及到资源管理的话就必须要自己实现 取地址及const取地址操作符重载 这两个默认成员函数一般不用重新定义 编译器默认会生成。 class Date { private :int _year ; int _month ; int _day ; public :Date* operator(){return this ;}const Date* operator()const{return this ;}};
http://www.yutouwan.com/news/94621/

相关文章:

  • 英文网站用什么字体好一键生成装修效果图app
  • 手机网站字体大小自适应dede大气黑色网站源码
  • 没人做网站了吗免费推广平台排行榜
  • 营销型网站建设软件做外贸用什么社交网站
  • 女人和男人做爰网站网站建设程序的步骤过程
  • 南阳网站建设xihewh做服装招聘的网站有哪些内容
  • 南京建站平台网上建立网站
  • 如何做网站数据库重庆定制网站建设
  • 摄影网站建设需求分析装修免费出效果图
  • html5风格网站特色滨州做网站的
  • 高端网站建设 aspx廊坊做网站企业教程
  • 唐山网站建设备案的网站建设书是什么意思
  • 网站网格布局内容营销的经典案例
  • 下载吧网站整站源码网页制作简易代码
  • 兰州网站建设索q479185700青岛网站推广服务
  • 站长工具百度百科淮安房产网
  • 上海网站建设制作微信网站广告位代码
  • 网站如何申请微信支付功能手机网站集成支付宝
  • 网站建设书怎么写网站建设找谁
  • 网站静态化 好处网站关键词优化wang
  • 泉州做网站哪家好网站建设销售找客户话术
  • 东莞知名网站推广缠绕机东莞网站建设技术支持
  • 网站设计协议苏州做手机网站
  • 纺织网站建设方案天津塘沽爆炸事件
  • 网站内容更新慢原因中国最新新闻头条
  • 低面效果在哪个网站做企业所得税怎么算一般纳税人
  • 建站推广什么意思如何使用微信公众号做网站
  • 东方网站建设电子商务网站建设实验总结
  • 做企业网站服务器在国外宜城做网站
  • 重庆多功能网站建设市场营销四大分析方法