我們首先來看上次遺留的問題。
把(1)中的代碼換為注釋部分,或許您一時還認識不到會有什么發(fā)生,但最終是通不過的,調(diào)試拋出異常,信息如下:
未處理的“System.Runtime.InteropServices.SEHException”類型的異常出現(xiàn)在 TestInit.exe 中
其他信息:外部組件發(fā)生異常。
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Press any key to continue
我想,您回頭再細看的話,就會明白為什么如此了(我們寫程序一定要追問到底:)。
我們今天要談的是,一些變量只有的初始化形式,通過例子,告訴您要特別注意。然后,我們就一步一步,來看資源淺拷貝的問題。我相信初學(xué)c++的同學(xué),會對“拷貝函數(shù)”有些疑問,它就是為了解決上述問題的;但事實上,還有一個隱藏的地方,今天我也想給您指出。
這些程序,可是我特意設(shè)計的哦。希望可以很方便的認識問題所在,與解決之道。
首先,看第一個例子。在類中,這兩類變量:
e.g.
Name &name; //引用
const int ID; //常量
它們的初始化形式是的。而且必須由您來初始化。
看下面的程序:
//human.h
#pragma once
class Name
{
char *name;
public:
//...
};
class Human
{
Name &name;
const int ID;//每個人都的標志號
//...
public:
Human(void);
~Human(void);
//...
};
//human.cpp
#include "human.h"
#using
//默認的構(gòu)造函數(shù)
Human::Human(void)
{
}
Human::~Human(void)
{
}
寫一個主文件測試。
但調(diào)試出錯,錯誤信息文件為:
/*----------------------------------------------------------------------------
//Human:error file
------ 已啟動生成:項目:TestInit, 配置:Debug Win32 ------
正在編譯...
Human.cpp
Human.cpp(5) : error C2758: “Human::name” : 必須在構(gòu)造函數(shù)基/成員初始值設(shè)定項列表中初始化
e:NETSmall_codeTestInitHuman.h(13) : 參見“Human::name”的聲明
Human.cpp(5) : error C2758: “Human::ID” : 必須在構(gòu)造函數(shù)基/成員初始值設(shè)定項列表中初始化
e:NETSmall_codeTestInitHuman.h(14) : 參見“Human::ID”的聲明
fmain.cpp
Date.cpp
正在生成代碼...
生成日志保存在“file://e:NETSmall_codeTestInitDebugBuildLog.htm”中
TestInit - 2 錯誤,0 警告
---------------------- 完成 ---------------------
生成:0 已成功, 1 已失敗, 0 已跳過
--------------------------------------------------------------------------------
*/
因為這里涉及的是僅僅的c++語法,我就不多費口舌了,如何改正,希望您能動手試試,一定要動手,不要想當(dāng)然哦~~~
當(dāng)然,如果您是愛問題的人,我想您可以這樣深究一下:設(shè)計c++語言時,為什么諸如int類型成員變量能提供默認初始化,而它們卻不能;從編譯角度,刻意給它們提供如int類型般的初始化會有什么困難和問題?
把(1)中的代碼換為注釋部分,或許您一時還認識不到會有什么發(fā)生,但最終是通不過的,調(diào)試拋出異常,信息如下:
未處理的“System.Runtime.InteropServices.SEHException”類型的異常出現(xiàn)在 TestInit.exe 中
其他信息:外部組件發(fā)生異常。
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Press any key to continue
我想,您回頭再細看的話,就會明白為什么如此了(我們寫程序一定要追問到底:)。
我們今天要談的是,一些變量只有的初始化形式,通過例子,告訴您要特別注意。然后,我們就一步一步,來看資源淺拷貝的問題。我相信初學(xué)c++的同學(xué),會對“拷貝函數(shù)”有些疑問,它就是為了解決上述問題的;但事實上,還有一個隱藏的地方,今天我也想給您指出。
這些程序,可是我特意設(shè)計的哦。希望可以很方便的認識問題所在,與解決之道。
首先,看第一個例子。在類中,這兩類變量:
e.g.
Name &name; //引用
const int ID; //常量
它們的初始化形式是的。而且必須由您來初始化。
看下面的程序:
//human.h
#pragma once
class Name
{
char *name;
public:
//...
};
class Human
{
Name &name;
const int ID;//每個人都的標志號
//...
public:
Human(void);
~Human(void);
//...
};
//human.cpp
#include "human.h"
#using
//默認的構(gòu)造函數(shù)
Human::Human(void)
{
}
Human::~Human(void)
{
}
寫一個主文件測試。
但調(diào)試出錯,錯誤信息文件為:
/*----------------------------------------------------------------------------
//Human:error file
------ 已啟動生成:項目:TestInit, 配置:Debug Win32 ------
正在編譯...
Human.cpp
Human.cpp(5) : error C2758: “Human::name” : 必須在構(gòu)造函數(shù)基/成員初始值設(shè)定項列表中初始化
e:NETSmall_codeTestInitHuman.h(13) : 參見“Human::name”的聲明
Human.cpp(5) : error C2758: “Human::ID” : 必須在構(gòu)造函數(shù)基/成員初始值設(shè)定項列表中初始化
e:NETSmall_codeTestInitHuman.h(14) : 參見“Human::ID”的聲明
fmain.cpp
Date.cpp
正在生成代碼...
生成日志保存在“file://e:NETSmall_codeTestInitDebugBuildLog.htm”中
TestInit - 2 錯誤,0 警告
---------------------- 完成 ---------------------
生成:0 已成功, 1 已失敗, 0 已跳過
--------------------------------------------------------------------------------
*/
因為這里涉及的是僅僅的c++語法,我就不多費口舌了,如何改正,希望您能動手試試,一定要動手,不要想當(dāng)然哦~~~
當(dāng)然,如果您是愛問題的人,我想您可以這樣深究一下:設(shè)計c++語言時,為什么諸如int類型成員變量能提供默認初始化,而它們卻不能;從編譯角度,刻意給它們提供如int類型般的初始化會有什么困難和問題?

