前言:时间过的好快,转眼一学期就过去了,期末考试也快到了,所以就复习一遍同时也将自己学习的感悟总结下来。前面几章大多与C语言相似,就不总结了。
第三章——函数
参数传递
#include <iostream>
using namespace std;
void swap(int a,int b) {
int t=a;
b=t;
a=b;
}
int main()
{
int x=5,y=10;
cout<<"x= "<<x<<" y= "<<y<<endl;
swap(x,y);
cout<<"x= "<<x<<" y= "<<y<<endl;
return 0;
}
//输出结果
x= 5 y= 10
x= 5 y= 10
通过这个例子,可以看出形参值的改变对实参是无影响的,如果是引用传递的话就另当别论了,看下面这个例子。
可以看出,如果使用引用参数的话是可以改变实参的值,但要注意:
- 声明一个引用时,必须同时对它进行初始化,使它指向一个已经存在的对象
- 一旦一个引用被初始化后,就不能改为指向其他对象
内敛函数
对于内敛函数,我的理解是就相当于一个类中公有类型的成员函数,只不过是放在了类外面,需要在函数返回值类型前加上inline
,而且内敛函数大多都是调用频率很高,而且代码是相对简单的。
带默认形参值的函数
通过这个代码就会理解带默认形参值的函数,但也有几点要注意:
- 有默认值的形参必须在形参列表的最后,因为实参与形参是按照从左到右的顺序建立关系的。
- 在相同的作用域中,不允许在同一个函数的多个声明中对一个参数的默认值重复定义。
函数重载
说白了,就是同一个函数名,但又不同的功能,这就叫函数重载,也需注意:
- 函数重载不以形参名来区分函数
- 函数重载不以返回值来区分函数
第四章——类与对象
类的定义:
class 类名称
{
public:
外部接口
private:
私有成员
};
对象声明:
类名 对象名;
对象访问数据成员:
对象名.
数据成员名
对象调用函数成员:
对象名.
函数成员名(参数表)
成员函数的实现:
返回值类型 类名::
函数成员名(参数表)
{
函数体
}
例如:
void Clock::setTime(int newH,int newM,int newS) {
hour=newH;
minute=newM;
second=newS;
}
void Clock::showTime() {
cout<<huor<<":"<<minute<<":"<<seconde<<endl;
}
到这才算刚接触到C++,这些便是C++访问成员函数或对象的一些方法。
构造函数
通过这个代码,感觉构造函数有一般成员函数的特征,但构造函数有一些特殊的特征:构造函数的函数名与类名相同,而且没有返回值
复制构造函数
复制构造函数的一般方法
class 类名
{
public:
类名(形参名);//构造函数
类名(类名 &对象名);//复制构造函数
…
};
类名::类名(类名 &对象名);//复制构造函数的实现
{
函数体
}
#include <iostream>
using namespace std;
class point {
public:
point(int xx=0,int yy=0) {
x=xx;
y=yy;
}
point(point &p);
int getX() {return x;}
int getY() {return y;}
private:
int x,y;
};
//成员函数实现
point::point(point &p) {
x=p.x;
y=p.y;
cout<<"copy"<<endl;
}
//形参为point类对象的函数
void fun1(point p) {
cout<<p.getX()<<endl;
}
//返回值为point类对象的函数
point fun2(){
point a(1,2);
return a;
}
int main()
{
point a(4,5);
point b=a;//情况一,用a初始化b.第一次调用复制构造函数
cout<<b.getX()<<endl;
fun1(b);//情况二,对象b作为fun1的实参。第二次调用复制构造函数
b=fun2();//情况三,函数返回值是类对象,函数返回时,调用复制构造函数
cout<<b.getX()<<endl;
return 0;
}
通过这个代码来了解一下复制构造函数,复制构造函数拥有一般构造函数的所有特性,而它所不同的是形参是本类的对象的引用。作用是使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。这个概念理解起来最好是通过代码,这样便于理解。
复制函数有三种情况可以被调用:
- 当用类的一个对象去初始化该类的另一个对象时。
- 如果函数的形参是类的对象,调用函数时,进行形参和实参的结合时。
- 如果函数的返回值是类的对象,函数执行完成返回调用者时。
析构函数
构造对象时,构造函数中分配了资源,动态申请了一些内存单元,在对象消失时需要释放这些内存单元。而析构函数就用来完成对象被删除前的一些清理工作。析构函数是在对象的生产期即将结束的时刻被自动调用的。而且析构函数不接收任何参数。