友元doc.docx
- 文档编号:8019123
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:7
- 大小:17.78KB
友元doc.docx
《友元doc.docx》由会员分享,可在线阅读,更多相关《友元doc.docx(7页珍藏版)》请在冰豆网上搜索。
友元doc
未完成注意易出错事项重点记忆
类的声明在.h
实现在.cpp
运算符的声明
Usingnamespacestd(名空间的声明)(包括cout,endl,show……)
#include<文件名>系统头文件
#include”文件名”自定义头文件
条件编译指令:
#ifndef_point_header
#define_point_header
Classpoint{
…………
}
#endif
名空间:
匿名空间:
只在当前文件可访。
不同的名空间划定了不同的作用域
1、打开名空间:
usingnamespacestd;(避免在头文件中直接打开)
2、打开指定名称:
Usingstd:
:
cout;打开名空间的cout
Usingstd:
:
endl;打开名空间中的endl
3、直接指定具体空间的标识符(头文件中使用):
std:
:
stringname;
Std:
:
iostreamname;
Const不变、不能被修改;
修饰对象(初始化后不变,只读不写)或成员函数(不改变数据的成员);
Const对整个对象只读不写
常用成员只能常调用常用函数
类名const对象名(参数);
Const类名对象名(参数);
Operate+已声明为complex类的友元函数
杜绝a+b=c
ConstComplexoperator+(constcomplex&c1,constcomplex&c2){}
Const区分重载,const成员函数不改变对象的成员数据
当const和&一起使用时,作用不同const------不变
&---------不是副本,返回的是引用
Int&--------返回的是引用
Int————返回的是副本int的值
&返回保证其元素本身
Const返回保证其元素不变
2011-4-20
Viod*————指向不确定类型
Typedefintstatus;(定义一个*****)
(*fun)(x1,x2)——函数指针
Typedef函数名(*)(x1,x2)记为pfun
等价于函数名(*pfun)(x1,x2)
Ssort()
返回值的形式——返回值是void无法实现++a的形式
Point形式的可返回变化了的a;
指针常量:
声名必须初始化;
初始化后不能修改
可以修改指向的变量的值
关键:
不能通过指针改变所指对象的值(可以是变量),但指针本身可以改变,可以指向另外的对象。
Constinta=10;
Constint*ptr;
P=&a;//对
*p=20//错
Intb=50;
P=&b;//对
*p=60;//错
This指针式指针常量,不允许被修改,只能修改其指向的对象
//Const修饰成员变量,实际上限定了
NewT与newT()区别
Int*ptr=newint;//未初始化
Int*ptr=newint();//初始化为0
Int*ptr=newint(10);//初始化为10
Point*ptr=newpoint[];//未初始化
Point*ptr=mewpoint[10]();//对所有成员按照newT()初始化;
拷贝:
深拷贝和浅拷贝
深拷贝:
写构造函数。
整个函数,和复制之前一模一样
浅拷贝:
首地址
ArrayOfPoints.h声明函数
ArrayOfPoints(intsize=10);
析构函数:
~ArrayOfPoints();
拷贝构造ArrayOfPoints(constArrayOfPoints&array);
ArrayOfPoints.cpp定义函数
ArrayOfPoints:
:
ArrayOfPoints(intsize/*=10*/){}
析构函数ArrayOfPoints:
:
~ArrayOfPoints(){}
拷贝构造ArrayOfPoints:
:
ArrayOfPoints(constArrayOfPoints&array)
:
size(array.size){}
数据的对考,重新开空间:
Size=array.size;
Points[i]=newpoint[size];
For(inti=0;i point[i]=array.point[i]; } String类: Typedefbasic_string Strings;——空串 Strings(str);——拷贝构造 Strings(str,1);——生成由str的位置1开始的字符串 strings(str,1,3);——生成由str的位置1开始的长度为3的字符串 strings(“abc”); strings(“abcdef”,4);——s=“abcd” strings(5,‘x’);g(,);——s=“xxxxx” strings(beg,end);——由迭代器区间(beg,end)内的字符生成 常用操作符: Getline整行输入(第三参数为分隔符) Cpp_07: 继承与派生: 1、继承方式与基类成员的访问控制 2、派生类的构造与析构 3、赋值兼容原则 4、派生类作用域与同名隐藏 5、多继承与虚基类 派生类(子类)继承基类(父类) ——全盘吸收(构造、析构除外) ——改造(重写基类相关的函数) ——新添() 派生类的定义: Class派生类名: 继承方式/*public、private、protected*/基类名 {新增成员的声明}; 默认缺省继承方式是private 1、继承方式与基类成员的访问控制属性 基类private对于一切继承方式都不可访问 基类protected对于继承方式为public为protected 其他的继承方式相一致 基类为public对于一切继承方式和基类相一致 派生类成员与基类成员重名时,隐藏基类的同名成员(同名隐藏,调用新增函数或成员) 引用基类成员时,加类名限定。 派生类内能通过派生类的对象访问基类的protected成员 而不能通过基类的对象访问 要通过对象访问private或protected成员只有在类内 派生类的构造函数: 先初始化基类成员,再初始化派生类的成员 基类成员的初始化由基类的构造函数负责 基类成员的初始化由初始化列表完成 定义: 派生类名(形参列表): 基类名(参数),新增成员名1(参数),新增成员2(参数) {派生类构造函数体} 执行顺序: 按继承时声明的顺序,调用基类构造函数 按成员声明的顺序,调用新增成员的构造函数 执行构造函数的代码体 构造函数的声明: 类名: : 类名: 调用的函数(参数),调用的函数(参数){函数内容}; 复制兼容规则: 原则: 先拷贝基类部分,再拷贝派生类新增成员 基类部分的拷贝根据赋值兼容原则,直接传派生类的对象 Circle: : Circle(constCircle&circle) : Point(circle)/*基类拷贝point(circle.x,circle.y)逻辑错误,对象要对拷,整体的拷贝是各部分拷贝的组合*/,radius(circle.radius){} Derived: : Derived(constDerived&d)Derived: : Derived(constDerived&d) : Base1(d),Base2(d),Base3(d),//全部采用基类默认的拷贝构造 member1(d.member1),//私有成员类内数据的对拷 member2(d.member2), member3(d.member3){}//数据的对拷 static成员的继承: 整个的继承体系的所有对象共享基类的static成员 允许访问的前提下,可以通过基类名或者派生类名访问static成员 拷贝构造: point(constpoint&point)前者是后者的拷贝函数 : x(point.x),y(point.y){代码} 析构函数: **公有继承才能把派生类作为基类成员 编译器对名字的查找过程////local: 派生类成员函数局部 global 含Base的namespace(s) Base Derived Local 多继承时的同名隐藏 虚基类(虚拟继承)首次定义加virtual 虚拟继承时派生类的构造: Base1,base2两条路径继承来的基类base0的构造由派生类derived确定,在derived的初始化列表中要明确base0的构造 Derived类(base1,base2共同公有派生类)的初始化包括主父基类的初始化和base0的初始化 虚拟继承中,base1和base2中关于base0的定义被忽略 组合与继承: Public派生继承基类的全部接口,is-a关系 派生类对象的内存布局: 赋值兼容原则, 一个基类指针无论是指向基类对象,还是指向派生类对象,通过它来访问一个基类中定义的成员,可以通过一种方式 基类的指针能指向派生类的对象 栈区里指针指向低端地址,堆区里也一样 Base1*pb1b=pd; Base2*pb2b=pd; 反直观的结论: pb1b和pb2b的值不同; 指针的转换并非地址值的复制
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- doc