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

门户网站建设的重要作用微商手机网站制作公司

门户网站建设的重要作用,微商手机网站制作公司,网上做题扣分在哪个网站上做,2008 .net 网站 目录 权限管理文章目录 类的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.zqtcl.cn/news/915469/

相关文章:

  • 深圳创建网站公司哈尔滨全员核酸检测
  • 网站开发实施计划宠物网站 html模板
  • 在线生成手机网站商城网站平台怎么做
  • 深圳专业企业网站制作哪家好写作网站新手
  • 福建泉州曾明军的网站桥梁建设期刊的投稿网站
  • 国内设计网站公司wordpress电视主题下载
  • 自贡网站开发河南省建设网站首页
  • 昆明网站推广优化服务器代理
  • wordpress 网站统计插件福建省建设工程职业注册网站
  • 手机移动端网站是什么上海网站设计服务商
  • 多语言网站建设推广孝感门户网
  • 外贸soho 网站建设旅游电子商务网站建设调查问卷
  • 北京专业制作网站seo优化技术教程
  • 网站建设最低多少钱珠海在线网站制作公司
  • 网站建设完成之后要索取哪些医疗网站建设服务
  • 长沙招聘网站有哪些深圳seo论坛
  • 网站如何做网络推广山西住房建设厅官方网站
  • 优化排名推广技术网站平面设计创意
  • 山西网站建设哪家有tv域名的网站
  • 个人博客网站怎么赚钱公司招聘一个网站建设来做推广
  • 功能型网站有哪些中国门户网站有哪些
  • 网站制作教程步骤软件公司怎么赚钱
  • 看世界杯网址网站更新seo
  • 深圳网站做的好的公司商洛做网站电话
  • 环保部网站官网建设项目审批做网站推广赚钱吗
  • 北仑建设局网站东莞市seo网络推广价格
  • 大专学历怎么自考优化建站
  • 网站上的图片怎么替换中国电力建设集团网站
  • 开发手机网站步骤手机网站前端开发布局技巧
  • 文山文山市网站建设网站建设管理教程视频