提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、面向对象程序设计的基本特点
1.抽象
对同一类对象的共同属性和行为进行概括,形成类
2.封装
将抽象出的数据、代码封装在一起,形成类
二、类和对象
类是同一类对象的抽象,对象是类的某一特定实体
1.类的定义
class Clock{
public:
void setTime(int newH, int newM, int newS);
void showTime();
private:
int hour, minute, second;
};
class是关键字,Clock是类名,函数setTime和showTime是对外接口
private隐藏起来的私有成员,在类外是看不见且不能直接使用的,只允许本类中的函数访问
public是类与外部的接口,任何外部函数都可以访问公有类型数据和函数
2.定义类的对象
类名 对象名; eg:Clock myClock;
在类外,通过对象可以访问public属性的成员,语法格式:对象名.成员名
举个例子:
类的定义:
#include<iostream>
using namespace std;
class Clock{
public:
void setTime(int newH = 0, int newM = 0, int newS = 0);
void showTime();
private:
int hour, minute, second;
};
成员函数的实现:
void Clock::setTime(int newH, int newM, int newS){ //就是常规的函数的定义加上Clock::即可
hour = newH; //虽然这个函数里没有定义hour但是你直接使用了,因为在类中private中已经定义过了
minute = newM;
second = newS;
}
void Clock::showTime(){
cout << hour << ":" << minute << ":" << second << endl;
//这两个函数可以共享私有成员中的数据
}
对象的使用:
int main(){
Clock myClock; // 定义Clock类对象myClock
myClock.setTime(8,30,30); //通过对象访问类中的公有类型的函数
myClock.showTime();
return 0;
}
三、构造函数和析构函数
1.构造函数
常规的初始化比如:int a = 0;或者int a(2);这都是对a进行初始化,那对类怎么进行初始化呢?
比如上面的代码时钟类,如果想初始化为0时0分0秒,可以写成Clock myClock(0,0,0)吗?当然 不可以 !!所以就有了构造函数
构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态。构造函数也是类的一个成员函数,除了具有一般成员函数的特征外,还有一些特殊的性质:
- 构造函数的函数名与类名相同
- 没有返回值
构造函数的调用:在对象创建时被 自动调用 ,例如:Clock myClock(0,0,0)
只要定义了对象,就必然会调用构造函数,不管你在类中有没有写构造函数
如果程序中未定义构造函数,编译器将在需要时自动生成一个 无参 默认构造函数,所以不可以写成Clock myClock(0,0,0)
#include<iostream>
using namespace std;
class Clock{
public:
Clock(int newH, int newM, int newS); //构造函数
void setTime(int newH, int newM, int newS);
void showTime();
private:
int hour, minute, second;
};
//构造函数的实现(写成初始化列表的形式):
Clock::Clock(int newH, int newM, int newS):hour(newH),minute(newM),second(newS){}
//其他函数实现和上面一样
//或者构造函数也可以这样写:(但是上面的写法效率更高,下面的更好理解)
Clock::Clock(int newH, int newM, int newS){
hour = newH;
minute = newM;
second = newS;
}
int main(){
Clock c(0,0,0); //自动调用构造函数
c.showTime();
return 0;
}
2.复制构造函数
如何生成一个对象的副本?用复制构造函数啊
(好复杂,看书吧)
3.移动构造函数
看看书吧,构造函数和复制构造函数比较重要
4. 析构函数
- 完成对象被删除前的一些清理工作
- 在对象的生存期结束的时刻系统自动调用它,然后释放此对象所属的空间
- 如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数,其函数体为空
(可能目前觉得这些都很没用,但是后面第五章和第六章会用到的)

被折叠的 条评论
为什么被折叠?



