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

用dreamriver做html网站项目网络图怎么画

用dreamriver做html网站,项目网络图怎么画,南梁红色景区建设管理局网站,谷歌浏览器安卓下载类和对象#xff08;下#xff09; 文章目录 类和对象#xff08;下#xff09;前言一、const成员二、友元1.友元函数2.友元类 三、初始化列表四、explicit关键字五、匿名对象总结 前言 static成员、内部类、const成员、初始化列表、友元、匿名对象 一、const成员 将cons…类和对象下 文章目录 类和对象下前言一、const成员二、友元1.友元函数2.友元类 三、初始化列表四、explicit关键字五、匿名对象总结 前言 static成员、内部类、const成员、初始化列表、友元、匿名对象 一、const成员 将const修饰的“成员函数”称之为const成员函数const修饰类成员函数实际修饰该成员函数隐含的this指针表明在该成员函数中不能对类的任何成员进行修改。 其特性如下 #define _CRT_SECURE_NO_WARNINGS 1 #include iostream using namespace std; class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;}void Print()//Date* this{cout _year 年 _month 月 _day 日 endl;}void Print()const //const Date* this{cout _year 年 _month 月 _day 日 endl;} private:int _year; // 年int _month; // 月int _day; // 日 }; int main() {Date d1(2028, 1, 11);d1.Print();const Date d2(2028, 8, 18);d2.Print();return 0; } 匹配原则找最合适的【权限不能放大】 d1调用第一个Print带const修饰 d2调用第二个Print不带const修饰 认为是2钟不同的类型构成函数重载 但是在这里这样使用const是没有意义的。 写一个简单的顺序表 #define _CRT_SECURE_NO_WARNINGS 1 #include iostream #include cassert using namespace std;class SeqList { public:void PushBack(int x){_a[_size] x;}size_t size()const{return _size;}int operator[](size_t i){assert(i _size);return _a[i];} private:int* _a (int*)malloc(sizeof(int) * 10);size_t _size 0;size_t _capacity 0; };int main() {SeqList sl;sl.PushBack(1);sl.PushBack(2);sl.PushBack(3);for (size_t i 0; i sl.size(); i){cout sl[i] ;//cout sl.operator[](i) ;//与上式等价}return 0; }但是当我们需要修改sl里的内容时是不可以的原因是重载operator[ ]返回的是int类型的_a[i]的拷贝具有常性。 这里需要提一下 此时就可以进行修改了。 此时如果又需要一个专门用于打印的函数Print并且在传参时防止sl对象被修改因此加以const修饰但是此时又会出现新的报错如下 #define _CRT_SECURE_NO_WARNINGS 1 #include iostream #include cassert using namespace std;class SeqList { public:void PushBack(int x){_a[_size] x;}size_t size(){return _size;}int operator[](size_t i){assert(i _size);return _a[i];} private:int* _a (int*)malloc(sizeof(int) * 10);size_t _size 0;size_t _capacity 0; };void Print(const SeqList sl) {for (size_t i 0; i s.size(); i){cout sl[i] ;} }int main() {SeqList sl;sl.PushBack(1);sl.PushBack(2);sl.PushBack(3);Print(sl);return 0; }报错原因出在const对象调用非const对象存在权限放大的问题 解决方法 size_t size() const{return _size;}//只读int operator[](size_t i) const{assert(i _size);return _a[i];}//读 or 写都可以 //与上一个代码块构成函数重载int operator[](size_t i){assert(i _size);return _a[i];} 只需要在size()和[ ]重载函数中加以const修饰this指针即可。 同样看下面这段日期类 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;}void Print()const{cout _year 年 _month 月 _day 日 endl;}bool operator(const Date d)const{//this-Print();//this 是非const 的可以调用const 的Printif (_year d._year){return true;}else if (_year d._year _month d._month){return true;}else if (_year d._year _month d._month _day d._day){return true;}return false;} private:int _year; // 年int _month; // 月int _day; // 日 };int main() {const Date d1(2028, 1, 11);Date d2(2028, 8, 18);cout (d1 d2) endl;cout (d1.operator(d2)) endl;//与上行代码等价return 0; }const Date d1(2028, 1, 11);当d1加上const时如果operator不加const的话会出现错误原因依旧是d1的类型是const Date*类型属于权限放大 二、友元 1.友元函数 友元函数的几点特性 友元函数可访问类的私有和保护成员但不是类的成员函数没有this指针友元函数不能用const修饰友元函数可以在类定义的任何地方声明不受访问限定符限制一个函数可以是多个类的友元函数友元函数的调用和普通函数的调用原理相同 还是之前说的日期类此时我们想要重载一下如下 void operator(ostream out){out _year 年 _month 月 _day 日 endl;}但是当我们想要使用重载的“时会出现以下情况 因此为了能够正常使用我们在全局定义关于”的重载函数,但在全局定义又会出现无法访问成员变量的问题因此此时就需要在Date中进行友元声明这样在全局定义的函数就可以访问类成员变量了 friend void operator(ostream out, const Date d);接下来为了满足coutd1d2;需要以上返回out即 ostream operator(ostream out, const Date d){out d._year 年 d._month 月 d._day 日 endl;return out;}2.友元类 友元类的所有成员函数都可以是另一个类的友元函数都可以访问另一个类中的非公有成员 友元关系是单向的不具有交换性友元关系不能传递友元关系不能继承 class Time {friend class Date1; public:friend class Date; // 声明日期类为时间类的友元类//则在日期类中就直接访问Time类中的私有成员变量Time(int hour 0, int minute 0, int second 0): _hour(hour), _minute(minute), _second(second){} private:int _hour; int _minute; int _second; };class Date1 { public:Date1(int year, int month, int day){_year year;_month month;_day day;}void SetTimeOfDate(int hour, int minute, int second){// 直接访问时间类私有的成员变量_t._hour hour;_t._minute minute;_t._second second;}void Print()const{cout _year 年 _month 月 _day 日 endl;} private:int _year; // 年int _month; // 月int _day; // 日Time _t; };三、初始化列表 就像这样 public://初始化列表是每个成员定义的地方Date(int year 1900, int month 1, int day 1): _year(year), _month(month), _day(day){} private://每个成员的声明int _year;int _month;int _day;需要注意的几点是 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)类中包含以下成员必须放在初始化列表位置进行初始化 引用成员变量const成员变量自定义类型成员(且该类没有默认构造函数时) 尽量使用初始化列表初始化因为不管你是否使用初始化列表对于自定义类型成员变量一定会先使用初始化列表初始化。成员变量在类中声明次序就是其在初始化列表中的初始化顺序与其在初始化列表中的先后次序无关 在构造函数的初始化列表阶段对内置类型用随机值进行初始化对自定义类型会调用它的默认构造 当_day给了缺省值 int _day1; _day给了缺省值把它初始化成1 了接下来还要走函数体变为18由此可知()缺省值就是给初始化列表用的!! 但是初始化列表也有不能解决初始化问题 比如要求数组_array初始化一下在函数体中中memset初始化 四、explicit关键字 class A { public:A(int i):_a(i){cout A endl;} private:int _a; };int main() {A aa1(1);A aa2 2; }因为 单参数构造函数的隐式类型转换用2调用A构造函数生成一个临时对象再用这个对象去拷贝构造aa2编译器会再优化优化用2直接构造 存在类型转换会生成临时对象2具有常量性ref不能引用临时对象也就是存在权限放大问题加上const就可以了即 const A ref 3; 紧接着还有一个问题那么为什么这里ret可以引用2因为因为这个单参数的函数支持隐式类型转换单参数函数这个参数2的的整型值能转换成一个A的对象就可以引用了。 如果说bu想让隐式类型转换发生可以加关键字explicit加在构造函数的位置 explicit A(int i):_a(i){cout A endl;}此时 以上是讨论的单参数的那么如果是多参数的呢 c11支持多参数的转换 class B { public:B(int b1,int b2):_b1(b1),_b2(b2){cout B endl;}private:int _b1;int _b2; }; int main() {B bb1(1, 1);B bb2 {2,2};const B ref { 3,3 };//同样的不加const就不支持引用return 0; }道理同上如果不想让隐式类型转换发生使用关键字explicit 五、匿名对象 首先来比较一下有名对象和匿名对象 有名对象 特点生命周期在当前局部域 A aa4(4); 匿名对象 特点生命周期只在这一行 A (5); 匿名对象可以用来传参不用先创建变量再传参 class A { public:explicit A(int i):_a(i){cout A endl;} private:int _a; };class SeqList { public:void PushBack(A x){_a[_size] x;}size_t size() const{return _size;}A operator[](size_t i) const{assert(i _size);return _a[i];}private:A* _a (A*)malloc(sizeof(A) * 10);size_t _size 0;size_t _capacity 0; };int main() {SeqList s;A aa3(3);s.PushBack(aa3);s.PushBack(A(4));//利用匿名对象直接传参return 0; }当在一些特定场景下适当使用匿名对象可以起到简化代码的作用。 总结
http://www.zqtcl.cn/news/463648/

相关文章:

  • 分类信息网站营销小程序appid是什么
  • 营销软文是什么意思网络seo培训
  • 效果好的手机网站建设成都网站制作报价
  • 江门网站建设推广平台注册公司费用要多少
  • 淄博哪家公司做网站最好新手做地方门户网站
  • 做一个交易平台网站的成本深圳南山做网站的公司
  • 网站建设的开发的主要方法aspcms分类信息网站
  • 中国免费图片素材网站烟台电商网站开发
  • 网站框架图浅谈网站的主色调设计
  • asp.net网站iis与目录权限设置做网站前端用什么软件好
  • 网站后台图片模板前端作业做一个网站
  • 做兼职的翻译网站吗教育直播网站开发
  • pxhere素材网站电子商务的网站开发的工作内容
  • 邮件网站怎么做wordpress如何代码高亮
  • 电脑做视频的网站吗中小学 网站建设 通知
  • 给企业做网站赚钱吗吉 360 网站建设
  • 网站建设多少价格东莞网站推广团队
  • 做课件的软件下载带有蓝色的网站html网页制作代码实例
  • 建设银行鄂州分行官方网站健身网站开发方式
  • 大连免费建站模板花坛设计平面图
  • 建设网站对企业有什么好处wordpress教程视频下载
  • 郑州网站提升排名上海 企业 网站建设
  • 南昌好的做网站的公司营销型网站 案例
  • 南宁经典网站建设网络运维工程师是干什么的
  • 网站开发算法建网站难不难
  • 茂名模板建站定制网站开发 ide
  • 做网站现在用什么语言网站估价
  • wap开头的网站外贸网站建设官网
  • 做网站说什么5.0啥意思wordpress教程视频 下载
  • 业务型网站做seo郑州网站推广优化