/*类构造函数(4)*/

#include "stdafx.h"
#include <string.h>
#include <iostream.h>
class Date
{
public:
    //
表达式表构造
    Date( int nYear = 1980 , int nMonth = 1, int nDay = 1 )
        :m_nYear(nYear),m_nMonth(nMonth),m_Day(nDay)
    {
       
    }
    int m_nYear;
    int m_nMonth;
    int m_Day;
};

class student
{
private:
    char m_szName[32];
    int  m_nAge;
    const int  m_nheight;   //
初始化表初始化
    int& m_refAge;          //
初始化表初始化
    Date m_BrothDay;        //
成员对象的构造的选择,自由选择
public:
    //
声明时不能带表
    student( int nAge,int nheight,char* pStrName,
        int nYear,int nMonth, int nDay);
    student( char* pStrName );
    student( const student* pObj)
        :m_nheight(pObj->m_nheight),m_refAge(m_nAge)
    {
        cout << "student( const student* pObj)" << endl;
    }
    //
返回一个引用
    int& GetHeight()
    {
        return (int&)m_nheight;
    }
};

//
实现时可以写初始化表
//
初始化表成员赋值顺序无所谓
//
数据成员初始化顺序 按照类中声明顺序依次进行
student::student( int nAge,int nheight,char* pStrName,
                  int nYear,int nMonth, int nDay)
                  :m_nheight(nheight),m_nAge(nAge),m_refAge(m_nAge),m_BrothDay(1979,12)
{
    strcpy(m_szName,pStrName);
    //m_nAge  = nAge;
    //m_nheight = nheight;
    cout << "student(int,int,char*)" << endl;
}

student::student( char* pStrName )
:m_nAge(25),m_nheight(180),m_refAge(m_nAge),m_BrothDay(1988,12,23)
{
    strcpy(m_szName,pStrName);
    cout << "student(char*)" << endl;
}

int main(int argc, char* argv[])
{
   
    static student StuStatic("");
   
    //student stu(20,175,"
张三",1979,12,26);
   
    student stu1("
张三");
   
    student stu2("
李四");
   
    cout << &(stu1.GetHeight()) << &(stu2.GetHeight()) << endl;
   
    //
指针赋值 ,没有构造函数调用
    student *pStu = &StuStatic;
   
    //
带参构造函数调用  student(const student* pObj)
    //
类指针作为参数构造
    student Stu3 = pStu;
   
    //
拷贝构造函数调用
    student Stu4 = *pStu;
   
    return 0;
}

posted on 2010-01-21 20:32  o无尘o  阅读(196)  评论(0编辑  收藏  举报