构造函数

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:1
name:stu1
sex:f
num:2
name:stu2
sex:m
Press 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()。
/****************************************************************************************************************************************/

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



你可能感兴趣的:(构造函数)