C++11新增类成员初始化
C++11之前类成员初始化,都是通过构造函数,现在C++11可以直接在类成员定义时初始化,像java一样。接下来看一段代码来体会下类成员初始化。
类成员初始化代码例:
C++11新增类成员初始化方式:
C++11新增类成员初始化与构造函数:
C++11之前类成员初始化,都是通过构造函数,现在C++11可以直接在类成员定义时初始化,像java一样。接下来看一段代码来体会下类成员初始化。
类成员初始化代码例:
C++11新增类成员初始化方式:
C++11新增类成员初始化与构造函数:
友元关键字是friend,也就是朋友的意思。是不是友元必须另一个类中声明,函数或类自己说是别人的友元。为什么要友元friend?有时在写代码时,类外要访问私有成员,这种情况下就只能声明成友元,不然无法防问类内私有成员。C++支持两种友元:友元函数、友元类。
我们知道int一般是4字节,char是1个字节。哪么将这两个类型写到类中定义一个新类型,在内存中又会是占几个字节呢?有人可能会认为就是简单算术加,其时并非这样。写段类定义代码来测试验证类中成员在内存中如何排列。
如果大家有细心看上面的代码,会发现,还有一个问题?就是类中定义了一个set()成员函数,但用sizeof关键字计算字节长度并没明将set()函数占的计算在内?这里要讲的是成员函数实际上并不属于对象,它只是一种“特殊的全局函数”。编译器具体怎么编译实现成员函数,C++标准中没有规定这点。但以后要记住一点的是“类对象占内存大小是指成员变量,不含成员函数”,就可以了。
C++中类class与结构struct其时是一样的,唯一不同点是类class的成员默认访问控制是私有的private,结构struct的成员默认访问控制是公有的public。
为什么一个语言里会有两个关键字做同样的事?这个就是说到C++的历史了。C++是从C发展过来的,完全兼容C的特性,所以也支持结构struct,但C++又是面向对象的,所以struct也具有了面向对象功能。但一般的人们在使用时还是会用class关键字来代表类,让struct结构来描述一些没有行为的,比如点、圆等等。
访问控制符用于指定类中成员的可访问性。类中有3种访问控制符public/private/protected,3种访问控制符具体意义:
类成员访问控制符public/private/protected,具体如何使用,经验是一般对外的成员函数设计成public公有的,类如果要用于继承就将成员变量设计成protected保护的,类中如果确定不能直接被外部访问的变量就设计成private私有的。以上方法可供参考,具体如何设计访问控制符没有统一的标准,要根据实际情况来考虑。
类中数据成员的访问,不管是方法或属性,有两种方法用操作符”.”或”->”。
如果还有当访问时编译器会有可能发生二义性时,再前面加上类名和”::”操作符。
类class也是一种自定义类型,跟struct结构一样。但一般认为类是面向对象程序设计的部份,类中可以将抽象后的事物定义成属性或方法,还有非常好的封装性、重用性。
这个类定义看起来非常像struct结构的定义,Cpeople类的所有成员都定义成公有的public,后面将会一篇篇讲类的部份,将一点会加进去一点内容,最终将成员定义成私有的private。
类中静态成员的static用法.staic是C++中的关键字,表示静态的数据,如果放在类中,比如
class T{
static int Num;
void fun(){
int i = Num;
}
};
在这里Num就是一个T中的静态成员,它将不依赖于对象存在。我们将可以跟据这个特性来
通过定义ostringstream和istringstream变量实现,在头文件
例如:
string类提供了向前和向后遍历的迭代器iterator,迭代器提供了访问各个字符的语法,类似于指针操作,迭代器不检查范围。
用string::iterator或string::const_iterator声明迭代器变量,const_iterator不允许改变迭代的内容。常用迭代器函数有:
const_iterator begin()const;