1、名空间:匿名空间:只在当前文件可访。不同的名空间划定了不同的作用域1、打开名空间:using namespace std; (避免在头文件中直接打开)2、打开指定名称:Using std:cout; 打开名空间的coutendl; 打开名空间中的endl3、直接指定具体空间的标识符(头文件中使用):std:string name; Std:iostream name;Const 不变、不能被修改;修饰对象(初始化后不变,只读不写)或成员函数(不改变数据的成员);Const 对整个对象只读不写 常用成员只能常调用常用函数类名const 对象名(参数);Const 类名 对象名(参数);Opera
2、te + 已声明为complex类的友元函数杜绝a+b=cConst Complex operator+ (const complex &c1,const complex &c2)Const 区分重载 ,const成员函数不改变对象的成员数据当const和&一起使用时,作用不同 const-不变 &-不是副本,返回的是引用Int&-返回的是引用Int返回的是副本int的值&返回保证其元素本身Const返回保证其元素不变2011-4-20Viod*指向不确定类型Typedef int status;(定义一个*)(*fun)(x1,x2)函数指针Typedef 函数名(*)(x1,x2)记为pf
3、un等价于 函数名(*pfun)(x1,x2)Ssort()返回值的形式返回值是void无法实现+a的形式Point形式的可返回变化了的a;指针常量:声名必须初始化; 初始化后不能修改 可以修改指向的变量的值 关键:不能通过指针改变所指对象的值(可以是变量),但指针本身可以改变,可以指向另外的对象。 Const int a=10;Const int *ptr;P=&a; /对*p=20 /错Int b =50;b;*p=60; /错This 指针式指针常量,不允许被修改,只能修改其指向的对象/ Const修饰成员变量,实际上限定了New T 与 new T()区别Int *ptr=new in
4、t; /未初始化Int *ptr=new int(); /初始化为0 Int *ptr=new int(10); /初始化为10Point *ptr=new point;Point *ptr=mew point10(); /对所有成员按照new T()初始化;拷贝:深拷贝和浅拷贝深拷贝:写构造函数。整个函数,和复制之前一模一样浅拷贝:首地址ArrayOfPoints.h 声明函数ArrayOfPoints(int size = 10);析构函数:ArrayOfPoints();拷贝构造ArrayOfPoints(const ArrayOfPoints &array);ArrayOfPoints
5、.cpp 定义函数ArrayOfPoints:ArrayOfPoints(int size /*= 10*/)析构函数ArrayOfPoints:ArrayOfPoints()拷贝构造ArrayOfPoints: ArrayOfPoints(const ArrayOfPoints &array):size(array.size)数据的对考,重新开空间:Size=array.size;Pointsi=new pointsize;For(int i=0;isize;i+)pointi=array.pointi;String类:Typedef basic_string string;String s
6、;空串String s(str);拷贝构造String s(str,1);生成由str的位置1开始的字符串string s(str, 1, 3);生成由str的位置1开始的长度为3的字符串string s(“abc”); string s(“abcdef”, 4); s=“abcd”string s(5, x); g(, ); s=“xxxxx”string s(beg, end);由迭代器区间(beg,end)内的字符生成常用操作符:Getline整行输入(第三参数为分隔符)Cpp_07:继承与派生:1、继承方式与基类成员的访问控制2、派生类的构造与析构3、赋值兼容原则4、派生类作用域与同名
7、隐藏5、多继承与虚基类派生类(子类)继承基类(父类)全盘吸收(构造、析构除外)改造(重写基类相关的函数)新添()派生类的定义:Class 派生类名:继承方式/*public、private、protected */ 基类名新增成员的声明;默认缺省继承方式是private1、 继承方式与基类成员的访问控制属性基类private 对于一切继承方式都不可访问基类protected 对于继承方式为public为protected 其他的继承方式相一致基类为public对于一切继承方式和基类相一致派生类成员与基类成员重名时,隐藏基类的同名成员(同名隐藏,调用新增函数或成员)引用基类成员时,加类名限定。派
8、生类内能通过派生类的对象访问基类的protected成员而不能通过基类的对象访问要通过对象访问private或protected成员只有在类内派生类的构造函数:先初始化基类成员,再初始化派生类的成员 基类成员的初始化由基类的构造函数负责基类成员的初始化由初始化列表完成定义:派生类名(形参列表):基类名(参数),新增成员名1(参数),新增成员2(参数)派生类构造函数体执行顺序:按继承时声明的顺序,调用基类构造函数按成员声明的顺序,调用新增成员的构造函数执行构造函数的代码体构造函数的声明:类名:调用的函数(参数),调用的函数(参数)函数内容;复制兼容规则:原则:先拷贝基类部分,再拷贝派生类新增成员
9、 基类部分的拷贝根据赋值兼容原则,直接传派生类的对象Circle : Circle (const Circle &circle) Point(circle)/*基类拷贝point(circle.x,circle.y)逻辑错误,对象要对拷,整体的拷贝是各部分拷贝的组合*/, radius(circle.radius) Derived:Derived(const Derived &d) Derived:d) Base1(d), Base2(d), Base3(d), /全部采用基类默认的拷贝构造member1(d.member1), /私有成员类内数据的对拷member2(d.member2),
10、member3(d.member3) /数据的对拷static成员的继承:整个的继承体系的所有对象共享基类的static成员允许访问的前提下,可以通过基类名或者派生类名访问static成员拷贝构造:point(const point &point)前者是后者的拷贝函数 :x(point.x),y(point.y)代码*公有继承才能把派生类作为基类成员编译器对名字的查找过程 / local:派生类成员函数局部global 含Base的namespace(s)BaseDerivedLocal多继承时的同名隐藏虚基类(虚拟继承)首次定义加virtual虚拟继承时派生类的构造:Base1,base2两
11、条路径继承来的基类base0的构造由派生类derived确定,在derived的初始化列表中要明确base0的构造Derived类(base1,base2共同公有派生类)的初始化包括主父基类的初始化和base0的初始化虚拟继承中,base1和base2中关于base0的定义被忽略组合与继承:Public派生继承基类的全部接口,is-a关系派生类对象的内存布局:赋值兼容原则,一个基类指针无论是指向基类对象,还是指向派生类对象,通过它来访问一个基类中定义的成员,可以通过一种方式基类的指针能指向派生类的对象栈区里指针指向低端地址,堆区里也一样Base1 *pb1b=pd;Base2 *pb2b=pd;反直观的结论:pb1b和pb2b的值不同;指针的转换并非地址值的复制
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1