- 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;
您可能关注的文档
最近下载
- TBIE 004—2023通孔回流焊接技术规范团标.pdf
- 国开《MySQL数据库应用》形考1-4(试题及答案).pdf VIP
- 煤矿安全生产作业规程操作规程安全技术措施编制审批贯彻及执行管理制度.doc
- 2020年光学膜行业研究报告.pdf
- 采血管种类和应用ppt课件.pptx VIP
- 职业生涯报告六篇.pdf VIP
- Unit 4 Plants arounds us PartA Let's talk(课件)人教PEP版(2024)英语三年级上册.pptx
- 七年级上册生物:必考问答式知识点汇总(背诵+默写).docx
- 《青纱帐——甘蔗林》课件【中职专用】高教版 基础模块下册.pptx
- 国家开放大学学位英语历年真题试卷号1909.docx
文档评论(0)