类和对象第三讲
来源:互联网 发布:医院财务管理优化方案 编辑:程序博客网 时间:2024/05/24 01:40
类和对象第三讲
还是先来继续介绍构造函数,今天想谈谈带参数的构造函数。例:求一个长宽高分别为(1)12,25,30。(2)15,30,21.的长方体的体积。
#include <iostream>using namespace std;class box{public: box(int,int ,int); void v_box();private: int h; int w; int l;};box::box(int h1,int w1,int l1){ h=h1; w=w1; l=l1;}void box::v_box(){ cout<<h*w*l<<endl;}int main(){ box b1(12,25,30); cout<<"第一个长方体的体积="; b1.v_box(); box b2(15,30,21); cout<<"第二个长方体的体积="; b2.v_box(); return 0;}
由此可知:
(1)带参数的构造函数中的形参,其对应的实参在定义对象时给定。
(2)用这种方法可以方便的实现不同的对象进行不同的初始化。
还可以这么写构造函数:bos ::bos(int h1,int w1,int l1):h(h1),w(w1),l(l1){}
介绍构造函数的重载
#include <iostream>using namespace std;class box{public: box(); box(int,int ,int); void v_box();private: int h; int w; int l;};box::box(){ h=10; w=10; l=10;}box::box(int h1,int w1,int l1){ h=h1; w=w1; l=l1;}void box::v_box(){ cout<<h*w*l<<endl;}int main(){ box b1; //建立对象b1,不指定参数 cout<<"第一个长方体的体积="; b1.v_box(); box b2(15,30,21); //建立对象b2,指定3个参数。 cout<<"第二个长方体的体积="; b2.v_box(); return 0;}
使用默认参数的构造函数
例:将上例中的构造函数改用含默认值的参数,长宽高的默认值均为10。
#include <iostream>using namespace std;class box{public: box(int h=10,int w=10,int l=10); int v_box();private: int h1; int w1; int l1;};box::box(int h,int w,int l){ h1=h; w1=w; l1=l;}int box::v_box(){ return (h1*w1*l1);}int main(){ box b1; //长宽高都是默认值10 cout<<"the volume of b1 is : "<<b1.v_box()<<endl; box b2(15); //长为15,其他为默认值 cout<<"the volume of b2 is : "<<b2.v_box()<<endl; box b3(15,30); //长为15,宽为30,高为默认值 cout<<"the volume of b3 is : "<<b3.v_box()<<endl; box b4(15,30,20); //长15,宽30,高20 cout<<"the volume of b4 is : "<<b4.v_box()<<endl; return 0;}
需要说明一下几点:
(1)应该在声明构造函数时指定默认值,而不是在定义构造函数时指定默认值。
(2)在声明构造函数时,形参名可以省略。即:box(int =10,int =10,int =10);
(3)一个类只能有一个默认构造函数!也就是说,可以不使用参数而调用的构造函数,一个类只能有一个。
(4)在一个类中定义了全部是默认参数的构造函数后,不能在定义重载构造函数。
比如:
box(int =10,int =10,int 10); //指定全部为默认参数
box(); //声明无参的构造函数,是重载构造函数
box(int ,int ); //声明有两个参数的构造函数,是重载构造函数
Box b1; // 是调用第一个还是第二个?
Box b2(15,30); // 是第一个还是第三个?
析构函数
首先,西沟函数是一个特殊的成员函数,他的作用与构造函数想法,他的名字是类名的前面加一个“~”。在C++中“~”是位取反运算符,所以析构函数与构造函数的作用相反。
析构函数的作用不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。
析构函数不返回任何值,没有函数类型,也没有参数。因为无参数,所以不能被重载。一个类可以有多个析构函数,但是只能有一个构造函数。
析构函数的主要作用是被用户用来执行“用户希望在最后一次石洞对象之后所执行的任何操作”。
举一个包含析构和构造函数的程序。
#include <iostream>#include <cstring>using namespace std;class myclass{public: myclass(int n,string nam,char s) { num=n; name=nam; sex=s; cout<<"构造函数"<<endl; } ~myclass() { cout<<"学号为"<<num<<"的"; cout<<"析构函数"<<endl; } void display();private: int num; string name; char sex;};void myclass::display(){ cout<<"num: "<<num<<endl; cout<<"name: "<<name<<endl; cout<<"sex: "<<sex<<endl;}int main(){ myclass m1(10010,"wang_li",'f'); m1.display(); myclass m2(10011,"long_ma",'m'); m2.display(); return 0;}
需要记住的是:先构造的后析构,后构造的先析构。
归纳一下什么时候调用构造函数和析构函数:
(1)构造函数在文件中的所有函数执行之前调用,当main函数执行完毕或调用exit函数时(此时程序终止),调用析构函数。
- 类和对象第三讲
- 第三讲 Groovy闭包和对象
- 第三讲 ASP.NET系统对象和状态管理(二)
- 类和对象第一讲
- 类和对象第二讲
- 类和对象第四讲
- 类和对象第五讲
- 类和对象第六讲
- 第二讲 类和对象
- 第三讲 面向对象(上)
- 第三讲 CObject类
- 第十一讲:类和对象的使用
- Python第四讲类、对象和函数
- 第三讲 变量和常量
- 第三章 类和对象
- 第三讲 类的验证,准备,解析和初始化
- 第三讲 基本图元和颜色
- 第三讲使用VPB切割和加载
- akoj-1189-字符串去特定字符
- 快排
- 单例模式
- 表格框架(frame)属性
- python复习过程遗漏知识
- 类和对象第三讲
- android ConextMenu
- GCD串行队列
- Vijos P1881 闪烁的繁星 (自己加强了一下。。)
- GCD并发队列
- linux命令后台运行
- android Alertdialog.Builder 创建对话框的七种方式
- 1635
- CSS round buttons