C++类的几个细节:友元和默认构造

原创 2015年11月21日 10:29:46
  1. 如果类中包含内置类型或者复合类型(比如数组或者指针)的成员,则只有当这些成员全部被赋予了类内初始值才适合用默认构造函数,否则,他们的值将是未定义的,这个跟以前的在块内定义的内置类型和复合类型默认初始化会苍生未定义的情况相同。如下

    Person p = Person();
    cout<<p.age<<"年龄"<<endl;        //age是int类型,属于内置类型,故输出后是未定义的有不确定的值
    cout<<p.address<<"地址"<<endl;  //address不是内置类型,也不是符合类型,故输出空字符串。

    其输出结果为:这里写图片描述

    可见int型内置类型有未定义的情况。

  2. 友元的声明仅仅制定了访问权限,而非一个通常意义上的一个函数声明,如 果我们希望类的用户能够调用某个友元函数,就必须在友元声明之外(类内那个声明)再专门对函数进行一次声明。如下的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);  //类外又声明了一次
  3. mutable声明限定了该数据成员是可变成员,任何成员函数包括const函数内都能改变该可变数据的值。
版权声明:本文为博主原创文章,未经博主允许不得转载。

C++类的静态成员,友元和常成员常对象

一、类的静态成员 静态成员是解决同一个类的不同对象之间数据和函数共享问题的。 1.静态数据成员(static data member) (1)静态数据成员在每个类中只有一个拷贝,由所有该类的对象...
  • zllbuaa
  • zllbuaa
  • 2014年03月21日 15:35
  • 922

c++类中的各种成员-嵌套类、友元和this指针

c++类中的各种成员-嵌套类、友元和this指针

类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

 1.第一个最简单的类模板案例 #include "mainwindow.h" #include #include #include   templ...

【C++ Primer】第十五章 友元、异常和其他 --之一--->友元和嵌套类

一,友元        1)可以将类作为友元,友元类的所有方法都可以访问原始类的私有成员和保护成员。        2)下面例子介绍了 电视类和遥控器类,其中遥控器类为电视类的友元类      ...

C++学习-------类继承之友元和操作符重载

/********************************************************************************* 这一次的代码没有什么东西,只是用...
  • gzzheyi
  • gzzheyi
  • 2011年07月18日 18:05
  • 801

c++学习笔记5:运算符重载、友元和类的类型转换

1. 运算符重载 1.1 运算符函数的声明 class Time { public: Time operator+(const Time & t)const; }; Time T...

模板类中包含模板类友元和其他友元函数

发表一点自己对 《C++ Primer 5th》模板那块的理解, 欢迎指正一对一友好关系在类模板与另一个模板(模板类或模板函数)间建立对应实例及其友好关系,为了在类模板中引用另一个类模板或函数的一个特...
  • wy11933
  • wy11933
  • 2017年05月03日 22:02
  • 436

【一天一篇CPP】友元和类

1.一般友元函数【就像可访问私有成员的一般函数】: 一个例子: #include using namespace std; class Time{ public: Time( int,...

C++语法基础--类(class)--类型别名,this指针,初始化式,友元的一些注意细节

注:“一些注意细节”是相对于我自己来说的(闲着无事,把入门书关于类的章节看了一遍,发现这些内容以前还真没注意到)。类的简要回顾,在C++语法基础--类已经概况了。 1.使用类型别名来简化类 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++类的几个细节:友元和默认构造
举报原因:
原因补充:

(最多只允许输入30个字)