C++第二天学习
回顾:
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++第二天学习的更多相关文章
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145330孙文馨 《Java程序设计》第二周学习总结
20145330孙文馨第二周学习总结 第二周相比于第一周对java语言有了深一点的了解,也意识到多敲代码才是学习计算机语言的最好方法. 教材内容总结 类型.变量与运算符 *基本类型 整数(short. ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20135328信息安全系统设计基础第二周学习总结(vim、gcc、gdb)
第三周学习笔记 学习计时:共8小时 读书:1 代码:5 作业:1 博客:7 一.学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
- JDBC第二次学习
脑子太笨,必须得记录下来一些文字,方便回来查询. 这是我的第二次学习JDBC的笔记,看的是传智播客——李勇老师的JDBC系列,已看到第23集. 分析在实际项目中该如何应用JDBC 一个简单用户相关的数 ...
- 20155304田宜楠 2006-2007-2 《Java程序设计》第二周学习总结
20155304田宜楠 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一.类型与变量 1.类型 整数: 可细分为为short整数(占2字节),int整数(占 ...
- 2017面向对象程序设计(Java)第二周学习总结
2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为 ...
- 201521123038 《Java程序设计》 第二周学习总结
201521123038 <Java程序设计> 第二周学习总结 1.本章学习总结 学会在Java程序中使用函数,使程序层次更清晰 使用StringBuilder编写代码,减少内存空间的占用 ...
- 201521123093 java 第二周学习总结
201521123093 <java程序设计> 第二周学习总结 一.第二周学习总结 答:(1)关于进一步使用码云管理代码,本周才真正学会了如何将Eclipse里的代码上传到码云中,并且能够 ...
随机推荐
- WeakSelf和StrongSelf
转载自:http://sherlockyao.com/blog/2015/08/08/weakself-and-strongself-in-blocks/ 现在我们用 Objective-C 写代码时 ...
- PAT (Advanced Level) 1064. Complete Binary Search Tree (30)
因为是要构造完全二叉树,所以树的形状已经确定了. 因此只要递归确定每个节点是多少即可. #include<cstdio> #include<cstring> #include& ...
- RMQ问题再临
RMQ问题再临 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 终于,小Hi和小Ho踏上了回国的旅程.在飞机上,望着采购来的特产——小Hi陷入了沉思:还记得在上上周他们去 ...
- [iOS]C语言技术视频-02-程序分支结构(if...else)
下载地址: 链接: http://pan.baidu.com/s/1dREc2 密码: egbt
- Delphi XE7 Update1修正列表
Delphi XE7 Update1修正列表 官方下载地址:http://altd.embarcadero.com/download/radstudio/xe7/delphicbuilder_xe7_ ...
- CentOS 6.X x64 编译安装 Countly
CentOS 6.X x64 编译安装Countly 安装所需的软件 yum -y install supervisor ImageMagick sendmail 1. 安装 node.js wge ...
- OPENCV形态学算法-2
一.漫水填充算法 该算法通过一个指定的种子点,来分析整张图片上的像素,并设置像素差异阈值,在阈值类的点,最后变成相同的颜色.该方法通过上下限和连通方式来达到不同的连通效果. 该方法常用与标记和分离图像 ...
- HDU 5620 KK's Steel
想了一下发现是斐波那契数列.....水题 #include <stdio.h> #include <algorithm> #include <string.h> # ...
- 在MAC上安装GitHub DeskTop
下载Git工具:下载链接 https://git-scm.com/downloads/ 然后配置Git:配置教程链接 http://jingyan.baidu.com/article/ceb9fb1 ...
- javascript 闭包理解
摘自:http://www.cnblogs.com/jkswjw/p/3180384.html javascript 闭包基础分享 闭包向来给包括JavaScript程序员在内的程序员以神秘,高深的感 ...