C++面向对象编程入门构造函数与析构函数Word格式文档下载.docx
- 文档编号:14957282
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:7
- 大小:17.61KB
C++面向对象编程入门构造函数与析构函数Word格式文档下载.docx
《C++面向对象编程入门构造函数与析构函数Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++面向对象编程入门构造函数与析构函数Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
string>
usingnamespacestd;
classTeacher
{
public:
Teacher(char*temp)
{
director=newchar[10];
strcpy(director,temp);
}
~Teacher()
cout<
<
"
释放堆区director内存空间1次"
;
delete[]director;
cin.get();
}
char*show();
protected:
char*director;
};
char*Teacher:
:
show()
returndirector;
}
classStudent
Student()
number=1;
score=100;
voidshow();
intnumber;
intscore;
Teacherteacher("
王大力"
);
//错误,一个类的成员如果是另外一个类的对象的话,不能在类中使用带参数的构造函数进行初始化
voidStudent:
cout<
teacher.show()<
endl<
number<
score<
endl;
voidmain()
Studenta;
a.show();
Studentb[5];
for(inti=0;
i<
sizeof(b)/sizeof(Student);
i++)
b[i].show();
cin.get();
}
可是很遗憾,程序不能够被编译成功,为什么呢?
因为:
类是一个抽象的概念,并不是一个实体,并不能包含属性值(这里来说也就是构造函数的参数了),只有对象才占有一定的内存空间,含有明确的属性值!
这一个问题是类成员初始化比较尴尬的一个问题,是不是就没有办法解决了呢?
呵呵。
。
c++为了解决此问题,有一个很独特的方法,下一小节我们将介绍。
对于上面的那个"
尴尬"
问题,我们可以在构造函数头的后面加上:
号并指定调用哪那个类成员的构造函数来解决!
教程写到这里的时候对比了很多书籍,发现几乎所有的书都把这一章节叫做构造类成员,笔者在此觉得有所不妥,因为从读音上容易混淆概念,所以把这一小节的名称改为构造类的成员比较合适
代码如下:
Student(char*temp):
teacher(temp)
Teacherteacher;
Studenta("
//Studentb[5]("
//这里这么用是不对的,数组不能够使用带参数的构造函数,以后我们将详细介绍vector类型
//for(inti=0;
//{
// b[i].show();
//}
大家可以发现最明显的改变在这里
Student(char*temp):
teacher(temp)
冒号后的teacher就是告诉调用Student类的构造函数的时候把参数传递给成员teacher的Teacher类的构造函数,这样一来我们就成功的在类体外对teacher成员进行了初始化,既方便也高效,这种冒号后指定调用某成员构造函数的方式,可以同时制定多个成员,这一特性使用逗号方式,例如:
Student(char*temp):
teacher(temp),abc(temp),def(temp)
由冒号后可指定调用哪那个类成员的构造函数的特性,使得我们可以给类的常量和引用成员进行初始化成为可能。
我们修改上面的程序,得到如下代码:
Student(char*temp,int&
pk):
teacher(temp),pk(pk),ps(10)
int&
pk;
constintps;
pk<
ps<
char*t_name="
intb=99;
Studenta(t_name,b);
改变之处最重要的在这里Student(char*temp,int&
teacher(temp),pk(pk),ps(10)
调用的时候我们使用
Studenta(t_name,b);
我们将b的地址传递给了int&
pk这个引用,使得Student类的引用成员pk和常量成员ps进行了成功的初始化。
但是细心的人会发现,我们在这里使用的初始化方式并不是在构造函数内进行的,而是在外部进行初始化的,的确,在冒号后和在构造函数括号内的效果是一样的,但和teacher(temp)所不同的是,pk(pk)的括号不是调用函数的意思,而是赋值的意思,我想有些读者可能不清楚新标准的c++对变量的初始化是允许使用括号方式的,inta=10和inta(10)的等价的,但冒号后是不允许使用=方式只允许()括号方式,所以这里只能使用pk(pk)而不能是pk=pk了。
这一小节的内容是说对象构造的顺序的,对象构造的顺序直接关系程序的运行结果,有时候我们写的程序不错,但运行出来的结果却超乎我们的想象,了解c++对对象的构造顺序有助于解决这些问题。
c++规定,所有的全局对象和全局变量一样都在主函数main()之前被构造,函数体内的静态对象则只构造一次,也就是说只在首次进入这个函数的时候进行构造!
classTest
{
public:
Test(inta)
{
kk=a;
构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 编程 入门 构造 函数