C++实用教程笔记

上传人:无*** 文档编号:158807246 上传时间:2022-10-06 格式:DOC 页数:10 大小:124.50KB
收藏 版权申诉 举报 下载
C++实用教程笔记_第1页
第1页 / 共10页
C++实用教程笔记_第2页
第2页 / 共10页
C++实用教程笔记_第3页
第3页 / 共10页
资源描述:

《C++实用教程笔记》由会员分享,可在线阅读,更多相关《C++实用教程笔记(10页珍藏版)》请在装配图网上搜索。

1、一、 文件重复包含处理: 方法一: #ifndef A_H #define A_H int a; #endif 方法二: #pragma once (绝大多数编译器支持)二、 访问权限的问题 1,类外只能访问public 2,在类内对象不受访问权限的限制三、 构造函数与析构函数1,结构体中的初始化因为成员变量都是public所以可以直接初始化 Person one = qqqq,23,45;2,在类中这样如果成员是public也是可以的,但是这样却降低了类的封装性。3,构造函数 1)默认构造函数(可以带参数) I)初始化一般要用对象成员初始化列表 2)带参数的构造函数 3)默认拷贝构造函数 I

2、)默认拷贝构造函数编译器会自动生成但是很多时候是不够用的(浅拷贝) II)自己要重载默认拷贝函数 4)默认拷贝函数的调用情况(两种情况都会构造临时的对象) I)对象作为函数的参数 II)对象作为函数的返回值 III)初始化新对象的时候 4,构造的顺序 首先构造类成员变量,然后是构造自己。 析构的顺序正好相反。、四、 const对象Const 对象必须初始化,而且之后不能被更改。五、 数据共享与成员特性1,静态成员 1)静态数据成员 I)静态数据成员定义: 在类内声明:static int nnum; 在类外定义与分配空间:int 类名:nnum = 0; II)静态成员的引用 可以通过对象引用

3、 可以同过类名直接引用 2)静态成员函数 I)静态成员函数的定义: 在类用定义 static void ChangeData() II)静态静态成员函数的引用: 可以通过对象引用 可以同过类名直接引用 III)静态成员函数的注意点: 静态成员函数只可以访问静态成员 注意类中的静态成员与普通静态变量和静态函数的区别。六、 友元1,友元函数 I)友元外部函数 Friend Cpoint inflate(Cpoint&pt,int a) 类外定义不要加类作用域 II) 友元成员函数 这个函数是另外一个类的成员函数 Friend Cpoint Cpoint:inflate(Cpoint&pt,int

4、a) 一定要加上它属于哪一个类2,友元类 Friend class A; 友元类中的每一个函数都是类的友元成员函数3,注意点 友元只能通过类的对象可以直接访问类的私有成员 友元不是该类的成员七、 类成员的其他特性1,const 成员 I)const数据成员 初始化后不能改变 II)const 成员函数 A)在参数列表后面加上const关键字 B)不能修改任何数据成员 C)不能调用非const成员函数(非const成员函数会修改数据成员) D)只有常成员函数在有资格被常对象调用 E)const 关键字可以区分重载函数 Void print(); Void print()const; 是合法的重载

5、。2,mutable成员 当数据成员用mutab关键字修饰后,那数据成员就可以在const函数中被修改3,explicit 成员 用explicit关键字修饰类的构造函数可以强制调用显示的构造函数。4,this指针 I)this指针在static成员函数中指向不明确,所以不能在其中使用 II)this指针在const函数中的类型是const类型,所以不能改变对象5,inline I)在类内定义函数一般是默认的内联函数 II)在类里声明,类外定义的函数要在类内与类外显示的注明八、 继承与派生1,继承的概念2,继承的分类(单继承与多继承)3,继承的特性 单向性、传递性、可重用性4,派生类的定义5,

6、继承的方式(共有继承、保护继承,私有继承) I)注意继承方式对数据访问的限制 II)即使子类也不能直接访问父类的私有成员。6,派生类的构造和析构 I)构造和析构顺序 A)单继承是按照先构造基类在构造子类,析构相反 B)多继承构造父类是按照继承顺序而来的 C)有对象成员的派生类对象成员在基类之后构造 II)派生类数据成员的初始化 通常将基类称为基类拷贝,或者基类子对象。 A)Student(string mname,char msex,int mage,string mno,float mscore) :no(mno),score(mscore),Person(mname,msex,mage)

7、/利用基类的构造函数进行初始化 cout Student类有参构造函数A:m。九、 二义性和虚基类 1,二义性概述 I)同名成员来自于不同的基类在子类中调用该成员的时候会发生编译错 误。这时候A:m,B:m来区分 II)同名函数来自于同一个基类,这时候B1:m,B2:m来区分 2,二义性的解决办法 二义性的根源是因为子类有多个基类的拷贝 解决的方法是虚基类与虚继承 此时B1和B2的构造不会去构造A,也就是说C类直接继承了A,这时可以在C中直接初始化A,C中只有一个A的副本十、 兼容 一个派生类对象可以赋给基类对象。十一、 类间关系 1,继承关系 2,组合关系 3,共享关系(通过静态函数和友元函

8、数十二、 多态 1,多态的分类 I)编译时的多态(通过函数的重载和运算符的重载实现) 静态联编 II)运行时的多态(通过继承和虚函数实现的) 动态联编 A)虚函数数不能是友元和静态的成员函数 B)析构函数可以是虚函数,构造函数则不行 C)虚函数派生下去仍然是虚函数,可以省略virtual D)返回类型一定要和基类的虚函数相同(这和一般的函数重载是不同的 ) III)虚析构函数 A)通过定义虚函数可以通过基类的指针或者是引用来调用 子类的析构函数 B)在visual C+MFC中基类用来搭建程序的框架,派生类是用户的代 码,通过虚函数来达到运行用户代码的目的。 2,纯虚函数和抽象类 I)纯虚函数

9、 Virtual float area()=0; 基类不知道函数的具体实现,必须让子类去实现 II)抽象类 至少包含一个纯虚函数的类 不能定义对象,但可以定义指针指向派生类。十三、 运算符重载 运算符重载属于静态联编的多态。它是通过运算符重载函数实现的。通常是类的 成员函数和友元函数。下面是一个简单的例子。#include using namespace std;class CComplexpublic:CComplex(double r = 0, double i = 0):real(r),image(i) cout 默认构造函数endl;CComplex(CComplex & c) cou

10、t 拷贝构造函数endl;real = c.real;image = c.image;void print()cout REAL:real ,IMAGE:imageendl; CComplex operator + (CComplex & c);CComplex operator + (double r); private:double real;double image;CComplex CComplex:operator +(CComplex &c) cout 重载运算符函数endl;CComplex tem;tem.real = real + c.real;tem.image = ima

11、ge + c.image;return tem;CComplex CComplex:operator +(double r)CComplex tem;tem.real = real + r;/tem.image = image + c.image;return tem;int main() CComplex c1(10,10),c2(20,20),c;c = c1+c2; /被解释为c1.operator+(c2)c.print();return 0; 1,运算符的重载限制 A)只能重载现有的运算符C+不允许重载:?:,.,*,:,sizeof。 B)重载运算符的优先级,操作数的个数不变 C)

12、=,(),,-不能重载为友元函数。 2,友元重载 A)只有一个参数:参数为类的对象或者是类的引用 B)有两个参数的至少有一个是对象或者是引用。#include using namespace std;class CComplexpublic:CComplex(double r = 0, double i = 0):real(r),image(i) cout 默认构造函数endl;CComplex(CComplex & c) cout 拷贝构造函数endl;real = c.real;image = c.image;void print()cout REAL:real ,IMAGE:imagee

13、ndl; CComplex operator + (CComplex & c);CComplex operator + (double r);friend CComplex operator+(double r,CComplex & c); friend CComplex operator-(CComplex & c); private:double real;double image;CComplex CComplex:operator +(CComplex &c) cout 成员重载运算符函数endl;CComplex tem;tem.real = real + c.real;tem.im

14、age = image + c.image;return tem;CComplex CComplex:operator +(double r)CComplex tem;tem.real = real + r;/tem.image = image + c.image;return tem;CComplex operator+(double r,CComplex &c) cout 友元重载运算符函数endl; CComplex tem; tem.real = c.real + r;tem.image = c.image;return tem;CComplex operator-( CComplex

15、 & c) cout 友员重载运算符函数endl; c.real = -c.real; c.image = -c.image; return c;int main() CComplex c1(10,10),c;c = -c1;c1.print();c.print();c = 3+c;c.print();return 0; 运行结果:(注意会发生很多的拷贝) 3,转换函数 强制转换函数 转换函数只能是成员函数,不能是友元函数。 Operator 转化符(); 4,典型运算符重载 I)赋值运算符 CComplex& operator=(CComplex& c) cout 赋值运算符函数endl;i

16、f(&c=this)return *this;real = c.real;image = c.image;return *this; A)返回值只能是引用类型 B)只能重载为非静态函数 C)是唯一一个不能被继承的函数 II)自增,自减运算符 Int i = 5; I+ 返回的是右值tem = i,i=i+1 所以(i+)+是错误的。 +i返回的是变量,可以是左值 CComplex& operator+() cout +Aendl; real+; image+; return *this;friend CComplex operator+(CComplex & one,int )/是用来区分前置 和后置的。 cout A+endl; CComplex c = one; one.real+; one.image+; return c;III)下表运算符的重载 .

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!