C++函数之类与对象初解3
一、 构造函数
1、 构造函数是用于创建对象的特殊成员函数。
2、 当创建对象时,系统自动调用构造函数。
3、构造函数的作用是:
(1)为对象分配空间
(2)对数据成员赋初值
(3)请求其他资源
4、没有用户定义的构造函数时,系统提供缺省版本的构造函数
5、 构造函数名与类名相同:类名
6、构造函数可以重载
构造参数形式: 类名 对象名[(实参表)];
举例 :
#include <bits/stdc++.h>
class Date
{ public:
Date(); // 此处无参构造函数
Date(int y,int m,int d);
void showDate();
private:
int year, month,day;
};
Date::Date() // 构造函数的实现
{ year=0; month=0; day=0; }
Date::Date(int y,int m,int d)
{ year=y; month=m; day=d; }
inline void Date::showDate()
{ cout<<year<<"."<<month<<"."<<day<<endl;}注意:1、构造函数可以有任意类型的参数,但没有返回类型
2、 类中没有定义构造函数,系统将自动生成一个默认形式的构造函数
二、构造参数的初始化
方法:
1.使用构造函数的函数体进行初始化
2.使用构造函数的初始化列表进行初始化
格式:
funname(参数列表):初始化列表
{ 函数体,可以是空函数体 }
初始化列表的形式:
成员名1(形参名1),成员名2(形参名2),成员名n(形参名n)
注:数据成员必须初始化三种条件
1、常量
2、引用类型
3、没有无参构造函数的类的对象
三、point 类
格式:
数据成员
点的坐标x,y
成员函数
无参构造函数
有参构造函数
set函数(设置x,y的值)
get_X函数
get_Y函数
display 函数
举例:
#include <iostream>
#include <cmath>
using namespace std;
class Point{
intx,y;
public:
Point(){}
Point(int a,int b)
{x=a,y=b; }
voidsetx(int xx) { xx=x; }
voidsety(int yy) { yy=y; }
intgetx() { returnx; }
intgety() { returny; }
};
#include <iostream>
#include <cmath>
using namespace std;
class Point{
intx,y;
public:
Point(int a=0,int b=0)
{x=a,y=b; }
voidsetx(int x) { this->x=x; }
voidsety(int y) { this->y=y; }
intgetx() { returnx; }
intgety() { returny; }
};
四、析构函数
类的数据成员中包含指针变量是从堆上进行存储空间分配的话,需要在析构函数中进行存储空间的回收。
注:可以不定义析构函数。
#include <bits/stdc++.h>
using namespace std;
class Student{
public:
Student(intn, string a_name, char s) {
num=n;
name=a_name;
sex=s; cout<<"Constructorcalled."<<endl;
}
~Student()
{ cout<<"Destructorcalled."<<endl; }//析构函数
voiddisplay()
{cout<<name<<endl;cout<<num<<endl;cout<<sex<<endl; }
private:
intnum; stringname; char sex;
};
五、this指针
(1)在类的非静态成员函数中返回类对象本身或对象的引用的时候,直接使用
return *this,返回本对象的地址时,returnthis。
(2)当参数与成员变量名相同时,如this->x = x,不能写成x = x。
(3)避免对同一对象进行赋值操作,判断两个对象是否相同时,使用this指针。