回顾:
1.第一个C++程序
头文件
输入输出
名字空间 using namespace std;
扩展名
编译方式 g++

2.名字空间

3.结构、联合、枚举

4.字符串
标准库提供的表示字符串的类型string

5.bool
1 0

6.函数升级
函数重载
相同的作用域,函数名相同,但是参数表不一样

默认参数
1.默认参数一定要靠右
2.避免二义性
3.默认参数要写在声明中
7.动态内存分配
new/delete
1.按类型分配空间
2.在分配空间的同时就可以初始化

delete []p;

-----------------------------------------
1.引用
引用即别名
引用是一个已经定义了的变量的别名。
int a = 10;
int& ra = a;
声明一个引用的格式:
类型& 引用名=已定义的变量;
&:引用声明符,不是取地址
1.一个变量的引用,和它本身是同一个东西,只要改变一个,另一个也随之改变
2.引用最主要的用途是用来作函数参数
swap(a,b); a1 = a,b1 = b;
swap3(a,b); int &a1 = a,int &b1 = b ;
1.节省空间
2.提高效率

3.引用作来返回值

2.类和对象

现实世界: 类
哈士奇
电脑
...
类:是一组具有相同属性和行为的对象的抽象和描述。
抽象:将有关事物的共性归纳、集中的过程。

对象:
万物皆对象。object

在面向对象程序设计中:
类:将多个对象的共性提取出来,定义的一种新的数据类型
是对 对象的属性和行为的抽象和描述。
对象:类 类型的变量
int a ;

类和对象的关系:
类它是抽象的,不占用空间
对象是具体的,占存储空间
类是对象的抽象,对象是类的具体的实例

在面向对象程序设计,总是先声明类,然后再由类生成其对象。

学生:
struct student
{

int num;
string name;
int age;
};

class student
{

int num;
string name;
int age;

void sleep();
void eat();
void study();
};

gg=G
3.结构体与类
1.为了照顾C程序员,所以在C++结构体尽量还是按照C风格来写
2.类比结构体更安全

区别:
结构体在默认情况下,它的成员都是公有的,在任何地方都可以访问
类在默认情况下,它的成员都私有的,在类的外部不能访问。

4.访问限定符
private: 私有的 只有在类的内部可以访问
public: 公有的 在类的内部和外部都可以访问
protected: 受保护的 只在类的内部和其子类可以访问

一般情况下,数据成员私有化,成员函数应该设为公有。

5.类的声明:
class 类名
{
public:
//公有成员(一般为函数)
private:
//私有成员(一般都是数据成员)
protected:
//受保护的成员
};

练习:
写一个类,其功能就是找出一个整型数组元素的最大值。
int array[5] = {1,2,3,4,5};

6.类的组织形式
1.声明一个类 应用放在头文件中
2.实现一个类 用一个.cpp文件来实现类
返回类型 类名::函数名(参数表)
{}
3.使用这个类

7.构造函数
构造函数主要用于为对象分配空间进行初始化。
构造函数是一种特殊的成员函数
构造函数的名字与类名要完全相同
构造函数没有返回值
构造函数在创建对象的时候 由系统自动调用,一定会调用,且只调用一次。
当我们在类中没有显式的声明构造函数时,编译器自动会创建一个构造函数,称为默认构造函数。
类名(参数表)
{}
一旦显式的声明了构造函数,系统不会再自动创建了。
构造函数也可以重载,也可以带默认参数

8.析构函数
在对象销毁时,自动调用,处理对象的善后工作。
最常用的用法:就是用来回收内存。
delete xxx
~类名()
{

}
析造函数也是一种特殊的成员函数
析构函数的名字是 ~类名
析构函数没有参数(意味着一个类里只能有一个析构函数)
由系统自动调用
析构函数也没有返回值

9.对象的创建与销毁
1.在栈中创建对象
类名 对象(构造函数参数);
Student s(参数);
2.在堆中创建对象
//int *p = new int;
类名 *对象指针名 = new 类名(构造实参);
student *s = new student;

3.在栈中创建对象数组
//int a[5];
类名 对象数组名[元素个数];

4.在堆中创建对象数组
int *p = new int[元素个数];
类名 *对象指针名 = new 类名[元素个数];

用new 创建的对象 一定要用delete 释放

练习: 实现一个电子时钟类
在构造函数中接收当前系统时间,以秒为单位运行
类的属性:时,分,秒
类的方法:构造函数
运行函数
对时间进行处理的函数
./myClock
17:13:50

int main()
{
MyClock c(...);
c.run();
return 0;
}

time(0);//获取系统时间,返回的是从1970年1月1日0点0分0秒到现在所经过的秒数
localtime();//把time得到的秒转为本地时间

#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	int &ra = a;
	cout << "ra = " << ra << endl;//10
	a = 20;
	cout << "ra = " << ra << endl;//20
	ra = 30;
	cout << "a = " << a << endl;//30
	cout << "&a = "<< &a << endl;//
	cout << "&ra = "<< &ra << endl;//
	return 0;
}
#include<iostream>
using namespace std;

void swap(int a1,int b1)//交换不成功
{
	int temp;
	temp = a1;
	a1 = b1;
	b1 = temp;
}

void swap2(int *a,int *b)//使用指针作为参数,容易出错
{
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
void swap3(int &a1,int &b1)//使用引用作为参数
{
	int temp;
	temp = a1;
	a1 = b1;
	b1 = temp;
}
int main()
{
	int a = 10;
	int b = 20;
//	swap(a,b);
//	swap2(&a,&b);
	swap3(a,b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	return 0;
}

#include<iostream>
using namespace std;
int& func(int& ra)
{
	ra = ra + 1;
	return ra;
}
int func2(int a)
{
	return a;
}
int main()
{
	int a = 10;
//	int r = func(a);
//	cout << "r = " << r << endl;

	int r2 = func2(a);//r2 = 10
	return 0;
}

#include<iostream>
using namespace std;

class student
{
public:
void sleep()
{
cout << "I am sleeping....." << endl;
}
// void eat();
// void study();
void show()
{
cout << num << endl;
cout << name << endl;
cout << age << endl;
}
private:
int num;
string name;
int age;

};

int main()
{

student s;
/*
s.num = 1001;
s.name = "zhangfei";
s.age = 20;

s.show();
s.sleep();
*/
return 0;
}

#include<iostream>
using namespace std;

class Test
{
	public:
		Test()
		{
			p = new int(100);
			cout << "Test()" << endl;
		}
		void show()
		{
			cout << "p = " << *p << endl;
		}
		~Test()
		{
			delete p;
			cout << "~Test()" << endl;
		}
	private:
		int *p;
};

int main()
{
	Test t;
	t.show();//Test()

	cout << "----------------" <<endl;
	Test *t1 = new Test;//Test()
	delete t1;//~Test()

	cout << "----------------" <<endl;
		//~Test()
	return 0;
}

#include<iostream>
using namespace std;

class array_max
{
public:
/*
array_max()
{
max = 0;
arr = NULL;
arrSize = 0;
cout << "这里是默认构造函数" << endl;
}

array_max(int m)
{
max = m;
cout << "这是带参数的构造函数"<< endl;
}
*/
array_max(int m = 0)
{
max = m;
arr = NULL;
arrSize = 0;
cout << "这里有默认参数的构造函数" << endl;
}
~array_max()
{
cout << "这里是析构函数" << endl;

}

void getArray(int *p,int size)
{
arr = p;
arrSize = size;
}
void init()
{
max = 0;
arr = NULL;
arrSize = 0;
}
int findMax()
{
max = arr[0];
for(int i = 0; i < arrSize; i++)
{
if(arr[i] > max)
{
max = arr[i];
}
}
return max;
}

private:
int max;
int *arr;
int arrSize;
};

int main()
{
int arr[5] = {1,2,3,4,5};
array_max arrMax(100);
array_max a1;
// arrMax.init();//初始化
arrMax.getArray(arr,5);
int r = arrMax.findMax();
cout << r << endl;
return 0;
}

C++第二天学习的更多相关文章

  1. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  2. 20145330孙文馨 《Java程序设计》第二周学习总结

    20145330孙文馨第二周学习总结 第二周相比于第一周对java语言有了深一点的了解,也意识到多敲代码才是学习计算机语言的最好方法. 教材内容总结 类型.变量与运算符 *基本类型 整数(short. ...

  3. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  4. 20135328信息安全系统设计基础第二周学习总结(vim、gcc、gdb)

    第三周学习笔记 学习计时:共8小时 读书:1 代码:5 作业:1 博客:7 一.学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 ...

  5. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

  6. JDBC第二次学习

    脑子太笨,必须得记录下来一些文字,方便回来查询. 这是我的第二次学习JDBC的笔记,看的是传智播客——李勇老师的JDBC系列,已看到第23集. 分析在实际项目中该如何应用JDBC 一个简单用户相关的数 ...

  7. 20155304田宜楠 2006-2007-2 《Java程序设计》第二周学习总结

    20155304田宜楠 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一.类型与变量 1.类型 整数: 可细分为为short整数(占2字节),int整数(占 ...

  8. 2017面向对象程序设计(Java)第二周学习总结

    2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为 ...

  9. 201521123038 《Java程序设计》 第二周学习总结

    201521123038 <Java程序设计> 第二周学习总结 1.本章学习总结 学会在Java程序中使用函数,使程序层次更清晰 使用StringBuilder编写代码,减少内存空间的占用 ...

  10. 201521123093 java 第二周学习总结

    201521123093 <java程序设计> 第二周学习总结 一.第二周学习总结 答:(1)关于进一步使用码云管理代码,本周才真正学会了如何将Eclipse里的代码上传到码云中,并且能够 ...

随机推荐

  1. WeakSelf和StrongSelf

    转载自:http://sherlockyao.com/blog/2015/08/08/weakself-and-strongself-in-blocks/ 现在我们用 Objective-C 写代码时 ...

  2. PAT (Advanced Level) 1064. Complete Binary Search Tree (30)

    因为是要构造完全二叉树,所以树的形状已经确定了. 因此只要递归确定每个节点是多少即可. #include<cstdio> #include<cstring> #include& ...

  3. RMQ问题再临

    RMQ问题再临 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 终于,小Hi和小Ho踏上了回国的旅程.在飞机上,望着采购来的特产——小Hi陷入了沉思:还记得在上上周他们去 ...

  4. [iOS]C语言技术视频-02-程序分支结构(if...else)

    下载地址: 链接: http://pan.baidu.com/s/1dREc2 密码: egbt

  5. Delphi XE7 Update1修正列表

    Delphi XE7 Update1修正列表 官方下载地址:http://altd.embarcadero.com/download/radstudio/xe7/delphicbuilder_xe7_ ...

  6. CentOS 6.X x64 编译安装 Countly

    CentOS 6.X  x64 编译安装Countly 安装所需的软件 yum -y install supervisor ImageMagick sendmail 1. 安装 node.js wge ...

  7. OPENCV形态学算法-2

    一.漫水填充算法 该算法通过一个指定的种子点,来分析整张图片上的像素,并设置像素差异阈值,在阈值类的点,最后变成相同的颜色.该方法通过上下限和连通方式来达到不同的连通效果. 该方法常用与标记和分离图像 ...

  8. HDU 5620 KK's Steel

    想了一下发现是斐波那契数列.....水题 #include <stdio.h> #include <algorithm> #include <string.h> # ...

  9. 在MAC上安装GitHub DeskTop

    下载Git工具:下载链接 https://git-scm.com/downloads/ 然后配置Git:配置教程链接  http://jingyan.baidu.com/article/ceb9fb1 ...

  10. javascript 闭包理解

    摘自:http://www.cnblogs.com/jkswjw/p/3180384.html javascript 闭包基础分享 闭包向来给包括JavaScript程序员在内的程序员以神秘,高深的感 ...