- 1、本文档共89页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C基礎学习_SNMP基础_CORBA基础_TCP基础
C++讲座
构造函数
对象的建立:先分配空间、再调用构造函数。这两个过程在某些情况下可以分离。
比如new (ptr) Type(参数)。
构造函数的形式:没有返回值,可以有参数,可以重载,但是不能为虚函数。
下列通过掉用重载的构造函数失败。
class Tdate
{
public:
Tdate();
Tdate(int d);
Tdate(int m, intd);
Tdate(int y, int m, int d);
};
Tdate::Tdate()
{
Tdate(0, 0, 0);
}
默认的构造函数:如果类没有定义构造函数,C++提供一个默认的无参数构造函数。只要有一个构造函数,C++就不提供一个默认的无参数构造函数,有些情况下还是需要提供默认构造函数,比如对象数组的创建或者vector等容器,需要调用无参的构造函数。默认构造函数创建对象时,如果是全局的对象或静态的对象,则对象的内部成员都是0,否则是随机值。
类成员初始化:初始化表和冒号语法。
下列的类成员不能被正确初始化:
class Student
{
public:
Student(int n);
protected:
StudentID id;
};
Student::Student(int n): id(n)
{
StudentID id(n);// 不能被正确初始化类成员id
// id = n;//类成员id被默认构造函数初始化,或者编译报错。
}
Student::Student(StudentID n): id(n)// 类成员id的拷贝构造函数被调用
{
}
初始化的顺序:基类成员、类成员声明的顺序,而与初始化表的顺序无关。
构造对象的顺序
构造函数的调用可以在对象定义、new Type(参数)、new (ptr) Type(参数)等形式被调用。
对象以声明的顺序构造,而与程序控制结构无关。实际上C++与C一样,所有函数内部的局部变量或者对象都在进入函数立即开始分配空间和构造,并且是按照声明的顺序构造的。
静态对象只被构造一次,如果是块作用域的静态对象,即使多次进入该块,也只构造一次。
Void fn(int I)
{
static SmallOne sm(n);
}
所有全局对象都在main()进入之前被构造,实际上main()是被系统的函数比如_start()调用的。这也意味着main之前还有很多初始化。全局对象的构造没有特殊顺序。
构造函数声明为保护或者私有的需要性。
class CN61FepSocket
{
public:
static CN61FepSocket* getInstance(void);
static void deleteInstance(void);
private:
CN61FepSocket();
~CN61FepSocket();
static CN61FepSocket* m_Instance;
};
使用这种方法可以确保对象的唯一性。
缺省情况下,参)被用作
// 在某个extern void print( const Account acct );// ...int main(){ // 把 oops Account 对象 // 用 Account::Account( oops, 0.0 )print( oops ); // ...}
在上面的程序段中的print()的Account 构造函数被编译器隐式地应用,以便把一个文字字符串转“oops”换成一个Account 对象,尽管这种转换在这种情况下并不合适。
关键字explicit 被引入到C++中,explicit 修class Account{public: explicit Account( const char*, double=0.0 ); // ...};explicit 只能被#include stdlib.h
#include iostream
class A {
public:
A() {
cout~Aendl;
throw 3;
}
~A() {
cout~Aendl;
}
};
int main () {
try {
A a;
coutend Aendl;
// 析构函数被自动调用。
} catch (...) {
coutcatch exceptionendl;
}
A* pa = NULL;
您可能关注的文档
最近下载
- 老年髋部骨折患者围术期下肢深静脉血栓基础预防专家共识(2024版).pdf VIP
- 华为ICT大赛云赛道认证考试复习题库(含答案).pdf VIP
- 北师大版六年级数学上册期中期末试题及答案.pdf VIP
- 2021-2022年中国ESG行业研究报告.pptx
- 第一单元峥嵘岁月 第1课情感表达 教学设计 人教版初中美术七年级上册.pdf
- 2024年秋新人教版地理七年级上册课件 4.1 多变的天气.pptx
- 人教版九年级全册英语Unit 14大单元整体教学设计.docx
- 大单元教学中的项目化学习——以五年级上册民间故事单元为例.docx
- 全员专项学习培训试题题库单选、多选试题附答案.doc VIP
- 22G101-3 混凝土结构施工图平面整体表示方法制图规则和构造详图(独立基础、条形基础、筏形基础、桩基础).docx
文档评论(0)