随笔分类 -  原创

摘要:1.默认构造函数,只要类中自己定义了一个构造函数,编译器也不会再生成默认的构造函数。 默认构造函数使用与变量初始化相同的规则来初始化成员,具有类类型的成员通过各自的默认构造函数进行初始化;内置和复合类型的成员,只对定义在全局作用域中的对象才进行初始化,当对象定义在局部作用域中的时候不进行初始化。2.复制构造函数,一种特殊的构造函数,具有单个形参,该形参是对类类型的引用,当定义一个新对象并用一个同类型的对象对它进行初始化的时候,将显示使用复制构造函数;当将该类类型的对象传递 给函数或者从函数返回该类类型的对象的时候,将隐士使用复制构造函数。3.析构函数是构造函数的互补,当对象超出作用域或者动态创 阅读全文
posted @ 2013-04-19 11:15 星语海蓝 阅读(1000) 评论(0) 推荐(0) 编辑
摘要:1.友元:允许一个类将对其非公有成员的访问权授予指定的函数或者类;2.友元的声明以关键字friend开始,只能出现在类定义的内部,友元的声明可以出现在类内部的任何地方; 将友元成组地放在类的开始或者结尾是个好主意。3.友元可以是普通的非成员函数,或者前面定义的其他类的成员函数,或者整个类。 1 class Screen{ 2 //声明一个友元类,该类必须提前定义 3 friend class Window_Mgr; 4 }; 5 6 Window_Mgr& Window_Mgr::relocate(Screen::index r, 7 Screen::index c,Screen .. 阅读全文
posted @ 2013-04-12 17:11 星语海蓝 阅读(227) 评论(0) 推荐(0) 编辑
摘要:可以用单个形参来调用的构造函数定义了从形参类型到该类类型的一个隐士转换。1 class Sale_item{2 3 Sale_item(std::istream &s);4 5 };6 7 string null_isbn = "123456789";8 item.same_isbn(null);这段程序将string类型的参数传递给一个期待Sale_item类型参数的函数;编译器会自动使用接受一个string对象的构造函数从null_isbn生成一个新的Sale_item对象,新生成的临时的Sale_item对象被传递给该函数。1.可以再接受一个参数的构造函数前面 阅读全文
posted @ 2013-04-11 16:59 星语海蓝 阅读(193) 评论(0) 推荐(0) 编辑
摘要:1.构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数。2.构造函数的名字和类的名字相同,但是不能指定返回类型。3.构造函数可以进行重载,只要每个构造函数的形参表是唯一的。4.只要创建一个类类型的对象,编译器就会自动运行一个构造函数。5.构造函数不可以是const(const在函数的后面,表示不能修改成员变量但构造函数一般或者总是要修改成员变量的)。6.构造函数的初始化式只能在构造函数的定义而不是在声明中指定。7.构造函数分为两个阶段进行:1.初始化阶段 2.普通的计算阶段 不管是否在构造函数初始化列表显示初始化,类类型的数据成员总是在初始化阶段初始化,初始化阶段发生在计算阶段 阅读全文
posted @ 2013-04-09 16:25 星语海蓝 阅读(264) 评论(0) 推荐(0) 编辑
摘要:this:成员函数都有一个附加的隐含形参,即指向该类对象的一个指针,它和调用成员函数的对象绑定在一起。如果对类成员的引用没有限定,编译器会把这种引用处理成通过this指针的引用。1.当我们需要将一个对象作为整体引用而不是引用对象的一个成员时。 返回一个引用,该引用指向执行操作的那个对象;1 Screen& Screen::set(char c)2 {3 content[cursor] = c;4 return *this;5 }2.普通的非const成员函数中,this的类型是一个指向类类型的const指针;可以改变this所指向的值,不可以改变this保存... 阅读全文
posted @ 2013-04-02 16:45 星语海蓝 阅读(159) 评论(0) 推荐(0) 编辑
摘要:内联函数:当它们被调用的时候,编译器将试图在同一行内拓展该函数。1.在类的内部定义的函数将自动作为内联inline函数处理。2.在类的定义体内部指定一个成员为inline,作为声明的一部分,或者也可以在类定义体外部的函数定义上指定inline,在声明和定义处指定inline都是合法的。3.inline成员函数的定义必须在调用该函数的每个源文件中是可见的。 阅读全文
posted @ 2013-04-02 15:00 星语海蓝 阅读(177) 评论(0) 推荐(0) 编辑
摘要:静态数据成员:1.静态数据成员实际上是类域中的全局变量。2.静态数据成员的初始化在主函数调用之前,并且不能在类的声明中出现。3.静态数据成员的状态并不会随着一个新的对象的新建而重新定义。4.静态数据成员的使用应该是类名称加区域分隔符加静态成员名称的,虽然我们仍然可以使用对象名加点操作符号加成员名称的方式使用,但是不推荐的,静态态类成员的特性就是属 于类而不专属于某一个对象5.不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。6.静态数据成员被 类 的所有对象.. 阅读全文
posted @ 2013-04-02 14:11 星语海蓝 阅读(277) 评论(0) 推荐(0) 编辑
摘要:1.const 定义一个常量,常量在定义之后就不可以在修改,任何修改的尝试都会引起编译错误,所以在定义的时候必须初始化。 const int nTemp = 9;2.在全局作用域声明的const变量是定义该对象的文件的局部变量,只存在于那个文件中,不能被其他文件访问; 通过指定const变量为extern,就可以在整个程序中访问const对象。 file_1.cc extern const int bufsize = 10; file_2.cc extern const int bufsize; for(int index = 0; index <= bufsize; index++); 阅读全文
posted @ 2013-04-02 11:30 星语海蓝 阅读(245) 评论(0) 推荐(0) 编辑
摘要:1.数组类型的变量有三个原则:数组的长度固定不变; 编译的时候必须知道其 长度; 数组只在定义它的块语句内存在;2.动态分配数组三个优势:编译的时候不必知道其长度; (通常)运行时才确定其长度; 动态分配的数组一直存在,直到程序显式释放它为止;3.动态分配 数组时,只需要制定类型和数组长度,不必为数组对象命名,new表达式返回指向新分配数组的第一个元素的指针;只能通过地址间接访问对象。4.动态分配数组的时候,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化;如果... 阅读全文
posted @ 2013-03-29 14:53 星语海蓝 阅读(490) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示