构造函数

来源:互联网 发布:网络语草根是什么意思 编辑:程序博客网 时间:2024/05/17 08:54
vc实例
// test.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <string>using namespace std;class  Student{public://1.无参数的构造函数,可以使用Student stu;创建对象,则num=1;name="lucky";sex='f';/*Student(){num=1;name="lucky";sex='f';}*///2.有参数的构造函数,并有初始值,如下,可以用如下形式创建对象//如Student stu;则默认为num=1;name="stu1";sex='f'//如Student stu(2,"stu2",'m');则num=2;name="stu2";sex='m'/*Student(int nu=1,string na="stu1",char se='f'){num=nu;name=na;sex=se;}*///3.使用参数初始化列表,同2.效果一样,使用方法也一样,但比较简便直观Student(int nu=1,string na="stu1",char se='f'):num(nu),name(na),sex(se){}void display(){cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;}private:int num;string name;char sex;};int main(int argc, char* argv[]){Student stu1;stu1.display();Student stu2(2,"stu2",'m');stu2.display();return 0;}
执行效果
num:1name:stu1sex:fnum:2name:stu2sex:mPress any key to continue

注意:
1.如果类中一个构造函数也没有显式定义,则可以使用Student stu;形式创建对像。创建对象时调用的是系统默认的一个无参构造函数,该函数什么也不做。,
2.如果类中有构造函数显式定义,则系统默认的构造函数失效。
所以,如果类中只定义了一个带参数的构造函数并且没有指定初始值,如Student(int nu,string na,char se)  ,则只能使用如Student stu(2,"stu2",'m')的形式创建对象,不能使用Student  stu;创建对象(因为默认无参数的构造函数已经失效,无法调用)。但可以用3.解决。
3.如果类中只定义了一个带参数的构造函数并且指定了初始值,比如Student(int nu=1,string na="stu1",char se='f');,则可以使用Student stu(2,"stu2",'m')创建对象,也可使用Student  stu;创建对象(调用的是自定义的构造函数,并使用初始值)。

4.无参数创建对象时是Student  stu;不要写成Student  stu()--这是声明一个普通函数stu(),函数返回值是Student  类型。--p75 c++面向对象程序设计

5.构造函数的重载:
在一个类中可以定义多个构造函数.以便对类对象提供不同的初始化的方法!供用户选用" 这些构造函数具有相同的名字!而参数的个数或参数的类型不相同" 这称为构造函数的重载"--p73 c++面向对象程序设计

6.
C++用new运算符动态地分配内存, delete运算符释放这些内存空间.这也适用于对象.可以用new 运算符动态建立对象,delete运算符撤销对象(静态是指在程序运行过程中对象所占的空间是不能随时释放的。例如在一个函数中定义了一个对象,只有在该函数结束时,该对象才释放)--p96 c++面向对象程序设计
比如
对于函数构造函数是Student(int nu=1,string na="stu1",char se='f');的类Student,可以如下动态为对象(开辟内存)
Student *pstu=new Student; //无参数动态创建一个对象,并返回对象在内存区的首地址,赋给pstu。调用的是上面那个自定义构造函数,并使用默认参数。
Student *pstu=new Student(3,"stu3",'m') ;//带参数动态创建,调用的是自定义构造函数。

动态创建new Student的格式跟静态创建Student stu的格式一样,所以无参数创建一个对象
时用Student  stu;不能写成Student  stu(),但new Student可写成new Student()

用new建立的动态对象一般是不用对象名的,而是用指向该对象内存区的指针,去访问该对象,如pstu->display()。
/****************************************************************************************************************************************/

派生类的构造函数:见下节。



原创粉丝点击