c++学习笔记

作者在 2017-05-23 17:38:10 发布以下内容


强制输出的数字以小数形式

cout << "变量" << endl;之前加 cout << fixed;

控制显示精度

 cout << setprecision(精度);(需要引用头文件 include<iomanip>)

以上代码可以结合使用:cout << fixed << setprecision(精度);(作用范围是全局)

flost不适合显示位数大的数字,不会四舍五入。

排版,对齐

cout << setw(宽度) << "|" << "\" << endl;其中 setw()是设置后面的符号距离左面的距离,"\"不会影响。

左对齐:

cout << setw(宽度) << "|" << "\" << endl;上一行加入cout << left;

填充:cout << setfill('_');

测量数据类型长度

sizeof(数据类型):用来测量数据类型的长度。

修改控制台标题

#include<windows.h>

setconsoleTitle("");

文档注释

/** 注释 */   提示会有文字注释

{

/** 攻击力 */

double attack = 10;

}

 

判断真假

布尔类型:true表示真,false表示假

在输出之前写:cout << boolalpha; 强制以truefalse来代替0或非零

逻辑运算符

&& 与(并且)   两个条件同时为真,结果为真。

||     两个条件有一个为真,结果为真。

! 非    条件为假,结果为真。条件为真,结果为假。

位(bit)运算符

需要先转换为二进制进行运算。

 

按位与    两个操作数同时为1,结果为1

按位或    两个操作数有一个位1,结果为1

按位非    操作数位1,结果为0

按位异或  两个操作数相同,结果为0

<< 左移      右侧空位补0

>> 右移      左侧空位补符号位。

定义常亮

const int N = 100;

测量长度

cout << "数组的大小" << sizeof(nums) / sizeof(int) << "个数组元素" << endl;

只能针对基本类型

定义

class 类名

{

}

声明对象

    CPeople op;

    CPeople* op1 = new CPeople;

 成员调用

栈区普通对象: 对象.成员 :   op.Test();

堆区指针对象:对象->成员:    op1->Test();     delete op1;

类的所有成员(个别特殊static),必须通过对象访问

访问修饰符

private

类内可见

类内不写访问修饰符,默认是private

protected

类内以及子类可见

public使用private成员使用private成员

类外可见

c++的结构体,默认是public

作用范围

书写位置开始,一直到下个修饰符,或者类结尾的花括号 }

拓展功能

作为类内成员分类的工具,这个,修饰符,写多少都行

安全性

友元函数

friend void fun();   需要声明

friend int main();    不需 要声明

使用protected成员有两种方法:继承和友元

使用private成员 :友元

特点

不受访问修饰符影响

可以有多个友元

缺点:破坏了类的封装性,不是迫不得已,不要用

函数成员

构造函数

作用

对数据成员赋初始值。

形式

类名(参数列表){}   无返回值

调用

对象定义的时候:

栈区对象:直接调用

堆区对象:声明指针并不会调用构造函数,new空间的时候调用

类型

默认构造函数:

什么都不做,即空的

只要声明了一个构造函数,默认的就没有了

 

有参数的构造函数:

通过对象传递

可以指定默认值

  

多个构造函数构成重载

成员函数定义

类内定义

 

类外:

类内声明:意义是用于多文件

类外定义

初始化列表

初始化与赋值的区别:

意义上:初始化是一个变量或者对象产生之时就赋予一个初始值,伴随性质

赋值是一个变量或者对象产生之后的任意时刻可以赋予一个值,随意性质

 

宏观代码上:

基本数据类型:作用相同

  

数组,结构体:初始化,和赋值的形式不同。作用相同

  

 

   引用,const:只能初始化不能赋值

 

形式:

构造函数之后加个冒号:a(1)b(2)

不是花括号之后

 

作用:

跟构造函数的区别:基本数据类型,用哪个都行,引用或const必须用初始化列表

对数据成员进行初始化:

1、可通过数值对数据成员初始化

2、可通过构造函数参数对数据成员进行初始化

3、可通过成员之间相互初始化,成员初始化的顺序

 

执行顺序:

   在构造函数之前  

 

引用和const

   引用

      引用成员

      引用参数

      引用类外

   const

      参数

      常量

 

注意点:

   多个构造函数,初始化列表绑定所在的构造函数

 

数组和结构体如何使用初始化列表:

   数组:

      CStu() : arr()

         vc无效果

         vs有效果

      通常设置设置数组元素全为0的方法

         memset

         for循环

   结构体:

      可直接赋值

      用初始化列表反而增加了复杂性

析构函数

作用:

   清理工作

      比如我们用new给成员申请了空间,析构函数内可以释放掉

   调用时间决定了他的主要作用

 

形式:

   ~类名()

      只有一个,没有参数

         没有重载

      默认析构函数

         什么都不做,默认构造函数

 

调用:

      对象声明周期结束时,自动调用

      1、局部对象

      2、临时对象:作用域是所在语句          

      3、指针对象:delete

      4、默认

 

malloc new的区别:

   new会触发构造函数,malloc不会

 

free delete区别:

   delete会触发析构函数,free不会

常函数

形式

void  fun() const {;}

构造和析构 不可以是常函数

特点

可以使用数据成员,不能修改数据成员,对函数的功能有更明确的限定

常函数的this指针是 const CStu*

常对象只能调用常函数,不能调用普通函数

static

形式

static int a;

static void fun(){}

静态成员

静态常量整型数据成员可以直接进行初始化

   static const float a = 13.12f;    不行

   static const int a = 13.12f;  整形

静态成员函数

1、无this

2、不能调用成员成员,可以调用静态成员

3、可以作为一种指挥该类所有对象的作用

4、他是属于类的属性,不是对象,即所有对象共有一个可以通过类名调用

可以通过对象调用

拷贝构造/复制构造:copy

形式

CStu(const CStu&)

   本质即构造函数

   参数是本类的常引用

何时调用

1、新建一个对象,并将其初始化为同类现有对象

   CStu a; 声明一个对象

   CStu a1(a);

   CStu a2 = a;

   CStu a3 = CStu(a);

   CStu* a4 = new CStu(a);

   赋值不会的CStu s;CStu p;s = p;    

 

2、当程序生成对象副本时

   函数参数传递对象的值

   函数返回对象

有何功能

默认的复制构造函数,逐个复制非静态成员(成员的复制成为浅复制)值,复制的是成员的值

 

   系统默认的这个又叫浅拷贝

   同一个类的多个对象,内存排布是一样的,地址不同

 

深拷贝

   指针成员不能直接赋值,要用内存拷贝,memcpy,strcpyd

拷贝构造所引发的指针成员二次释放崩溃的问题的方式

   深拷贝

   传地址

   传引用

数据成员

相对特殊

引用成员

   初始化列表初始化

const成员

   初始化列表初始化

静态成员

   类外初始化

   this指针

静态常量成员

   可在类内直接初始化

   也可在类外初始化

指针成员

   注意拷贝构造产生的问题

this

1、作用:区分同名的,是指向当前对象的指针,所以我们可以通过指针,访问成员  

2、对象创建的时候才有的

3、类型:对应对象的类的指针类型

4this指针不是成员

5this作用域是在类内部,系统默认传递给函数(非静态函数)的隐含参数

 

 

  

 

默认分类 | 阅读 1385 次
文章评论,共1条
ZSPM(作者)
2017-06-07 20:39
1
走过路过不要错过。。。
游客请输入验证码
浏览1385次
文章分类
文章归档