C++前6周学习总结

递归思想——层层分解

递归关键
递归定义
终止条件

递归问题主要是:将大规模问题分解为小规模问题(层层分解)逐渐变小,直到满足停止的条件!
例:n!=n*(n-1)! ——停止条件是当分解到1或者2时停下。

复合数据类型

  1. C++语言的内置复合类型有:指针、引用、数组、结构体、枚举型;
  2. 标准库类型:string
  3. 自定义类型

结构体

在C++中,允许在结构中定义函数(成员函数);

struct 类型名{
type1 name1;
type2 name2;
...
//数据成员
type name(参数){
···
}
···
//成员函数
}变量名;

结构体变量特点:
可以对结构体变量进行整体操作;
变量名.成员名;
结构体的初始化与数组类似。

结构体的封闭性不好,不建议使用

枚举型

定义一组命名的整数常量,若有一个赋值,则为其余的赋予相邻值。

enum 枚举类型 {常量0,常量1,···}

string

头文件 <string>
<iostream> 可以读写string对象。

//初始化
string s1;
string s2=s1;
string s2(s1);
string s3(str);
string s3=str;
string s4(n,'C');//由n个C组成的字符串
//读取一行文本
getline(cin,line_str);
str.empty()//判断是否为空
str.size();//字符串长度

字符串比较大小按照字典顺序;

指针

指向一个对象,并持有该对象的地址。访问对象——地址访问。

典型用法:
构建链式的数据结构:例如链表和树;
管理程序运行时动态分配对象;
作为函数的参数。(用此可以更改参数值,还可以 引用 来更改)

type *p1,*p2;
type* p1,p2;//这两种定义是一样的
type *p3=&a;//p3指向变量a ,&——取址运算符
type **pi=&p3;//指针的指针
//空指针
type *p4=0;
type *p5=NULL;
//x=y;
int x=10,y=20;
int *p=x;
*p=y;

同类型的指针可以进行“==”和“!=”的比较,返回bool类型;
指针可以进行+或-整数值的算术运算;
数组元素访问时可以用自增自减运算。

void*指针

  1. 通用指针(有任何类型的地址值);
  2. 不能操作指针指向的对象,只能传送地址值或者比较地址值;
  3. 不允许指针到其他类型指针的直接赋值

动态分配空间 new、delete
new运算符
在堆上动态分配,并返回地址。

 type *ip1=new type(初始值);//申请一个空间,附有初始值
 type *ip2=new type[数组大小];//数组大小为数组元素的个数

delete运算符

delete ip1;//释放一个指针
delete[] ip2;//释放ip2申请的所有空间

const 限定指针

  1. 指向const对象的指针
//指针的值不能改变
const type *p1;
const type *p2;
  1. 指向非const对象的const指针
 type* const p=a;
 //初始化后值不能改变,指向固定的单元;
  1. 指向const 对象的const指针
const type* const p=a;
//地址不可变,地址所包含内容也不可变

数组

下面库函数的头文件 <iterator>
begin(数组名)
返回指向数组的第一个元素
end(数组名)
返回指向数组最后一个元素的下一个位置的指针

引用

引用没有分配空间,只是在绑定变量(变量的另一个名字),主要用做函数的参数。
& 说明符
引用必须被初始化,初始值是一个有内存地址的对象。(不是简单的拷贝,而是绑定在一起)

type& 引用名 =初始值;
//x=y
int  x=10,y=20;
int &r=x;
r=y;

const 限定引用

  1. const ->const
  2. const->非const,但是const不能用来修改它所绑定的对象
  3. 非const->const

类和对象

类的定义

  1. 类是对具有相同属性和行为的一类客观事物的概括描述。是用户自定义的数据类型
  2. 类的定义包括行为和属性两个部分。
  3. 属性以数据表示,行为通过函数实现。
class 类名
{
public:
	公有数据成员和成员函数;
private:
	私有数据成员和成员函数;
protected:
	保护数据成员和成员函数;
};//分号不可以省略

注意:
1.类的数据成员可以是其他类的对象,但不能以类自身的对象作为本类的成员,而类自身的指针和引用可以作为类的成员。
2.类定义必须以分号 " ;"结束。
3.类与结构体的区别:
没有明确指定类成员的访问权限时,c++结构体的成员是公有的,而类的成员是私有的。
4.在类的定义中不能对数据成员进行初始化
5.类中的数据成员可以是c++语法规定的任意数据类型。
6.类的成员可以是其他类的对象,称为类的组合,但不能以类自身的对象作为本类的成员。

类的访问属性

  1. public
  2. protect
  3. private

成员函数

类的成员函数是实现类的行为属性的成员。
一般将成员函数声明为函数原型,在类外具体实现成员函数。

type 类名::成员函数名(参数表)
{
	函数体
}//成员函数的定义

对象

对象是类的实例。

对象
数据类型
变量
类名 对象名1,对象名2,···;

类成员的访问

对象成员的访问包括:
圆点访问形式:对象名.公有成员
指针访问形式:对象指针变量名->公有成员

函数重载

函数名相同,但参数不相同(类型不同,或者个数不同)的一组函数。

构造函数

用于创建对象的特殊函数,创建对象时,系统调用构造函数。

  • 构造函数的作用:为对象分配空间;对数据成员赋初值;请求其他资源。
  • 构造函数可以重载。
  • 构造函数有任意类型的参数,没有返回值。
类名::类名(){}//系统默认的

创建对象

类名 *指针变量=new类名9[(实参表)];
类名 对象名[(实参表)];

数据成员的初始化

  1. 使用构造函数的函数体进行初始化
  2. 使用构造函数的初始化列表进行初始化
funname(参数列表):初始化列表
{函数体,可以是空函数体}

必须用初始化列表的情况

  1. 数据成员为常量
    2.数据成员为引用类型
  2. 数据成员没有无参构造函数的类的对象

析构函数

用于取消对象的成员函数

  • 当一个对象作用结束时,系统西东调用析构函数。
  • 无参,无返回值。
类名::~类名(){}

复制构造函数

复制构造函数用一个已有同类对象创建新对象进行数据初始化

类名::类名(const 类名& 引用名,...);
//const 保护实参对象只读

特点:
1.复制构造函数名与类名相同,并且也没有返回值类型。
2.复制构造函数可以写在类中,也可以写在类外。
3.复制构造函数要求有一个类类型的引用参数
4.如果没有显式定义复制构造函数,系统自动生成一个默认形式的复制构造函数。

常成员

常数据成员是指数据成员在实例化被初始化后,其值不能改变。
在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数
常成员函数

type 函数名(参数表) const;
//不能更新对象的数据,也不能调用非const修饰的成员函数(静态成员函数,构造函数除外)

常对象

如果在说明对象时用const修饰,则被说明的对象为常对象。

类名 const 对象名[(参数表)];
const 类名 对象名[(参数表)];

1.C++不允许直接或间接更改常对象的数据成员。
2.C++规定常对象只能调用它的常成员函数、静态成员函数、构造函数(具有公有访问权限)。

静态成员

类成员冠以static声明时,称为静态成员。(静态成员函数在类外定义时不用static前缀。)
静态数据成员为同类对象共享。
静态成员函数与静态数据成员协同操作。
静态成员函数没有this指针。

对于类的普通数据成员,每一个对象都各自拥有一个副本。(分配不同的存储空间)
对于静态数据成员,每个类只拥有一个副本 。(在静态存储区分配一个存储空间,对所有对象都是可见的)

类名::静态成员名字
对象名.静态成员名字
对象指针->静态成员名字
//类外静态成员声明
type 类名::静态数据成员[=初始化值];//必须声明

不能在成员初始化列表中进行初始化
如果未进行初始化,则编译器自动赋初值
初始化时不能使用访问权限
静态成员函数主要用来访问同一类中的静态数据成员。
私有静态成员函数不能在类外部或用对象访问。

友元函数

不建议使用,破坏了类的封闭性
运算符重载的时候可以使用
如果在本类(类A)以外的其他地方定义了一个函数(函数B),在类体中用friend对其(函数B)进行声明,此函数就称为本类(类A)的友元函数。
友元函数(函数B)可以访问这个类(类A)中的私有成员。

运算符重载

运算符函数可以重载为成员函数友元函数
不能重载的运算符. :: .* ?: sizeof

重载运算符的限制:
不可改变运算符的优先级
不可改变运算符的结合性
不可改变运算符所需要的操作数
不能创建新的运算符

//在类外定义成员运算符函数的格式如下:
 type 类名::operator运算符(形参表)
{
	函数体
}

重载++/–
重载赋值运算符=
c++中不能用友元函数重载的运算符有= () [] ->
重载赋值运算符
赋值运算符重载用于对象数据的复制
operator=必须重载为成员函数
重载函数原型为:类名 & 类名 ::operator=(类名)
重载(),[]

感想

在这六周的学习中,感觉自己学的还行吧,老师讲的知识点都可以懂得,在此基础上,我也会多多练习,毕竟熟练些用起来也顺手。
在编程的过程中,虽然经常遇到一些小错误,但这也体现了我对这门语言一些细节问题不太重视,今后我也会加强巩固。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值