C++类的几个细节:友元和默认构造
2015-11-21 10:29
369 查看
如果类中包含内置类型或者复合类型(比如数组或者指针)的成员,则只有当这些成员全部被赋予了类内初始值才适合用默认构造函数,否则,他们的值将是未定义的,这个跟以前的在块内定义的内置类型和复合类型默认初始化会苍生未定义的情况相同。如下
其输出结果为:
可见int型内置类型有未定义的情况。
友元的声明仅仅制定了访问权限,而非一个通常意义上的一个函数声明,如 果我们希望类的用户能够调用某个友元函数,就必须在友元声明之外(类内那个声明)再专门对函数进行一次声明。如下的read函数:
mutable声明限定了该数据成员是可变成员,任何成员函数包括const函数内都能改变该可变数据的值。
Person p = Person(); cout<<p.age<<"年龄"<<endl; //age是int类型,属于内置类型,故输出后是未定义的有不确定的值 cout<<p.address<<"地址"<<endl; //address不是内置类型,也不是符合类型,故输出空字符串。
其输出结果为:
可见int型内置类型有未定义的情况。
友元的声明仅仅制定了访问权限,而非一个通常意义上的一个函数声明,如 果我们希望类的用户能够调用某个友元函数,就必须在友元声明之外(类内那个声明)再专门对函数进行一次声明。如下的read函数:
#include<string> using namespace std; class Person { friend Person &read(istream &is,Person &p);//此处声明只是生命了访问的权限。 public: string name; string address; public: const string& getName()const; const string& getAddress()const; istream &read(istream &is,string& s); ostream&out(ostream& os,string& s); public: Person(const string &s1,const string &s2):name(s1),address(s2){} Person(void); ~Person(void); }; Person &read(istream &is,Person &p); //类外又声明了一次
mutable声明限定了该数据成员是可变成员,任何成员函数包括const函数内都能改变该可变数据的值。
相关文章推荐
- 25.c/c++程序员面试宝典-继承
- C语言多线程中变量累加问题的分析
- C语言常用的函数
- c++ 对象模型(二)
- c++对象模型
- HDU4121 UVa1589 Xiangqi 解题报告
- [黑马IOS自学第六篇]C语言指针,数组指针,字符指针学习
- [黑马IOS自学第五篇]C语言二维数组,排序法学习
- C语言拾遗
- C++中sort函数用法
- Jni :三维数组处理方法 ,以整形三维数组为例 C++实现
- C语言:设置自动关机程序:2分钟之后关机,请输入\"我好帅\"三个字解除\n"
- 深入理解C++中的mutable关键字
- 指针与数组的关联3 --声明
- C++中消除CString类型字符串中的标点符号
- C,C++如何和OC混用
- C++ GUI Qt4编写的文本编辑器
- 《c语言从入门到精通》看书笔记——第15章 存储管理
- 《c语言从入门到精通》看书笔记——第14章 文件
- Google C++ Testing Framework Primer