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

soap公司网站用户体验 网站

soap公司网站,用户体验 网站,出入郑州最新通知今天,网站响应时间多久类与对象#xff08;上#xff09;#xff1a;C初阶学习第三弹——类与对象#xff08;上#xff09;-CSDN博客 类和对象#xff08;中#xff09;#xff1a;C初阶学习第四弹——类与对象#xff08;中#xff09;-CSDN博客 一.赋值运算符重载 1.1 运算符重载 C为…类与对象上C初阶学习第三弹——类与对象上-CSDN博客 类和对象中C初阶学习第四弹——类与对象中-CSDN博客 一.赋值运算符重载 1.1 运算符重载 C为了增强代码的可读性引入了运算符重载运算符重载是具有特殊函数名的函数也具有其 返回值类型函数名字以及参数列表其返回值类型与参数列表与普通的函数类似。 函数名字为关键字operator后面接需要重载的运算符符号。 函数原型返回值类型 operator操作符(参数列表) 注意 1.不能通过连接其他符号来创建新的操作符比如operator 2.重载操作符必须有一个类类型参数 3.用于内置类型的运算符,其含义不能改变例如内置的整型不 能改变其含义作为类 4.成员函数重载时其形参看起来比操作数数目少1因为成员函数的第一个参数为隐藏的this 5.   .* :: sizeof ?: . 注意以上5个运算符不能重载。这个经常在笔试选择题中出现。 1.2 赋值运算符重载 1. 赋值运算符重载格式 参数类型const T传递引用可以提高传参效率 2.返回值类型T返回引用可以提高返回的效率有返回值目的是为了支持连续赋值 3.检测是否自己给自己赋值 4.返回*this 要复合连续赋值的含义 二.构造函数进阶  2.1构造函数体赋值 在创建对象时编译器通过调用构造函数给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _month;int _day; }; int main() {Date d1();return 0; } 虽然上述构造函数调用之后对象中已经有了一个初始值但是不能将其称为对对象中成员变量 的初始化构造函数体中的语句只能将其称为赋初值而不能称作初始化。因为初始化只能初始 化一次而构造函数体内可以多次赋值。 1.2 初始化列表 初始化列表以一个冒号开始接着是一个以逗号分隔的数据成员列表每个成员变量后面跟 一个放在括号中的初始值或表达式。 class Date { public:Date(int year, int month, int day):_year(year),_month(month),_day(day){} private:int _year;int _month;int _day; }; 不过要注意的是 1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 2. 类中包含以下成员必须放在初始化列表位置进行初始化 引用成员变量 const成员变量  自定义类型成员(且该类没有默认构造函数时) class A { public:A(int a):_a(a){} private:int _a; }; class B { public:B(int a, int ref):_aobj(a), _ref(ref), _n(10){} private:A _aobj; // 没有默认构造函数int _ref; // 引用const int _n; // const }; 1.3 explicit关键字 对于接受单个参数的构造函数构造函数不仅可以构造与初始化对象还具有类型转换的作用。 1、构造函数只有一个参数 2、构造函数有多个参数但是只有一个没有默认值 class Date { public:// 1. 单参构造函数没有使用explicit修饰具有类型转换作用// explicit修饰构造函数禁止类型转换---explicit去掉之后代码可以通过编译explicit Date(int year):_year(year){}/*// 2. 虽然有多个参数但是创建对象时后两个参数可以不传递没有使用explicit修饰具有类型转换作用// explicit修饰构造函数禁止类型转换explicit Date(int year, int month 1, int day 1): _year(year), _month(month), _day(day){}*/Date operator(const Date d){if (this ! d){_year d._year;_month d._month;_day d._day;}return *this;} private:int _year;int _month;int _day; }; void Test() {Date d1(2022);// 用一个整形变量给日期类型对象赋值// 实际编译器背后会用2023构造一个无名对象最后用无名对象给d1对象进行赋值d1 2023;// 将1屏蔽掉2放开时则编译失败因为explicit修饰构造函数禁止了单参构造函数类型转换的作 // 用 } 三.static成员 用static修饰的成员变量就是类中的静态成员变量用static修饰的成员函数就是静态成员函数 我们需要注意的是静态成员变量一定要在类外进行初始化 class A { private:static int _a; };//在类外对_a进行初始化 int A::_a 0;int main() {return 0; } 1、静态成员存放在静态区为所有类成员共享 2、静态成员必须在类外定义初始化类中只是声明 3、静态成员访问方式类名静态成员或者对象.静态成员 四.友元 1.1友元函数 友元提供了一种突破封装的方式有时提供了便利。但是友元会增加耦合度破坏了封装所以 友元不宜多用。 友元分为友元函数和友元类 问题现在尝试去重载operator然后发现没办法将operator重载成成员函数。因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作 数了。但是实际使用中cout需要是第一个形参对象才能正常使用。所以要将operator重载成 全局函数。但又会导致类外没办法访问成员此时就需要友元来解决。 class Date { public: Date(int year, int month, int day): _year(year), _month(month), _day(day){}// d1 cout; - d1.operator(d1, cout); 不符合常规调用 // 因为成员函数第一个参数一定是隐藏的this所以d1必须放在的左侧 ostream operator(ostream _cout){_cout _year - _month - _day endl;return _cout;} private: int _year; int _month; int _day; }; 友元函数可以直接访问类的私有成员它是定义在类外部的普通函数不属于任何类但需要在类的内部声明声明时需要加friend关键字。 class Date {friend ostream operator(ostream _cout, const Date d);friend istream operator(istream _cin, Date d); public:Date(int year 1900, int month 1, int day 1): _year(year), _month(month), _day(day){}private:int _year;int _month;int _day; }; ostream operator(ostream _cout, const Date d) {_cout d._year - d._month - d._day;return _cout; } istream operator(istream _cin, Date d) {_cin d._year;_cin d._month;_cin d._day;return _cin; } int main() {Date d;cin d;cout d endl;return 0; } 友元函数的说明 友元函数可访问类的私有和保护成员但不是类的成员函数 、 友元函数不能用const修饰 友元函数可以在类定义的任何地方声明不受类访问限定符限制 一个函数可以是多个类的友元函数 友元函数的调用与普通函数的调用原理相同 1.2  友元类 友元类跟上面的友元函数很想也是间接访问一个类中私有化成员的一种方法友元类的所有成员函数都可以是另一个类的友元函数都可以访问另一个类中的非公有成员。 class Time {friend class Date; //声明Date为友元类 private:int _hour;int _min; }; class Date { public:void test(int hour, int min){_t._hour hour; //可以在Date类中直接引用Time类私有成员变量_t._min min;} private:int _year;int _month;int _day;Time _t; }; 1.3 内部类 如果一个类定义在另一个类的内部这个内部类就叫做内部类。内部类是一个独立的类 它不属于外部类更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越 的访问权限。 总结 1、内部类和外部类实际上还是两个完全独立的类完全可以将它们两个分开写 2、内部类是外部类的友元类可以访问外部类的私有成员但外部类不是内部类的友元类 3、内部类可以直接访问外部类的静态成员不需要外部类的对象名或者类名 class A { private:static int k;int h; public:class B // B天生就是A的友元{public:void foo(const A a){cout k endl;//OKcout a.h endl;//OK}}; }; int A::k 1; int main() {A::B b;b.foo(A());return 0; }感谢大佬支持关于类和对象的知识目前就先讲到这里如果有疑问或者是不对的地方请大佬们指出。
http://www.w-s-a.com/news/890695/

相关文章:

  • 网站建设商标属于哪个类别搜狗seo快速排名公司
  • 织梦做商城网站企业网络建站
  • 网站后期维护都有什么wordpress首页加图片
  • 展会网站怎么做网页设计与制作教程版徐洪亮课后答案
  • 石景山网站建设设计公司建设网站怎么建立服务器
  • 本地生活服务平台app网站关键词优化原理
  • 建网站的公司叫什么重庆论坛建站模板
  • 湖北网站制作公司银川网站建设哪家不错
  • 网站后台演示地址服装网站建设公司推荐
  • 湖北钟祥建设局网站旅游哪个网站最好
  • 浙江建设工程信息网站辽宁建设工程信息网场内业绩什么意思
  • 郑州做网站公司 汉狮网络专业图片搜集网站怎么做
  • 网站托管是什么品牌推广营销平台
  • 制作网站的难度贵州省兴义市建设局网站
  • 永春建设局网站室内设计师培训班学费多少
  • 做仿站如何获取网站源码windows2012做网站
  • 网站建设最好的公司东莞外贸网站
  • 普兰店网站建设一般做网站什么价格
  • 网站建设的发展目标甘肃网站设计公司
  • 常州西站建设规划室内装修设计学校哪里好
  • 大连网站制作选择ls15227如何编辑网站
  • 网站发稿平台迪士尼网站是谁做的
  • 常州有哪些好的网站建设案例wordpress 360 插件
  • 模板网站有后台么柳城网站建设
  • 地方门户网站制作一级做c爱片的网站
  • 自己上传图片做动漫图网站北京福田汽车
  • 一级a做爰片免费网站录像ps做网站图片水印
  • 网页广告投放成都优化推广公司
  • 网站开发 印花税网页制作站点
  • 创建个人网站有什么好处国外建站系统