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函数内都能改变该可变数据的值。
版权声明:本文为博主原创文章,未经博主允许不得转载。

友元函数与成员函数的一点区别

最近,学习友元函数,发现友元函数可以操作成员变量,包括私有成员变量。 但是,友元函数和类的成员函数相比,还是有区别。 例如,在友元函数中,无法直接操作成员变量。必须要现有一个类的对象,再通过这...
  • shine_journey
  • shine_journey
  • 2016年02月26日 00:17
  • 486

C++函数的哑元及其作用

一个函数的参数 只有类型 没有名字 则这个参数称之为哑元。哑元的作用1.表达参数列表匹配更加严格 void test(void);2.保持函数的向前兼容特性 void decode(int...
  • dsanmux
  • dsanmux
  • 2015年08月04日 11:17
  • 1494

C++ 友员

1.什么是友员? 在类中通过声明 friend class 类名 成员友员。 例如: class A { private: void show() {qDebug() QString m...
  • li235456789
  • li235456789
  • 2016年01月23日 22:55
  • 474

友元关系和继承

问题:在c++primer(中文第四版)第15.2.6节,讲了友元关系在类继承上的有效性,其中注解部分强调:        (1)友元关系不能继承。(2)基类的友元对派生类的成员没有特殊的访问权限。(...
  • shiquxinkong
  • shiquxinkong
  • 2013年12月09日 19:57
  • 1056

C++学习日记day04

第四课 1.成员指针 1)指向成员变量的指针 定义:成员变量类型 类名::*指针变量名; 赋值/初始化:指针变量名=&类名::成员变量名; 解引用:对象.*指针变量名、对象指针->*指针变量...
  • chenshen001
  • chenshen001
  • 2012年03月22日 21:04
  • 225

C++类的默认函数有几个 分别是什么?

C++类的默认函数有几个 分别是什么? 举报|2009-08-27 11:20杜周 | 分类:C/C++ | 浏览2215次 如题 一道面试题目 分享到: ...
  • u013176681
  • u013176681
  • 2014年09月14日 16:22
  • 1228

深入理解C++类的构造函数与析构函数

在研究C++类的继承、派生、组合时,一直没有清晰地了解构造函数与析构函数的调用过程。本章通过点-线组合类,来深入分析组合类情况下,对象的构造与析构。 1.问题的引入 源代码: #include ...
  • shenziheng1
  • shenziheng1
  • 2016年07月13日 23:16
  • 1913

友元,异常和其它

友元,异常和其它 友元类于友元方法 之前我们说的函数,成员函数或类为友元只能说是有类定义的,从外部来看并没有什么“友情”,假设电视机和遥控器,遥控器可以对电视机产生影响,但是电视机与遥控器既不是is-...
  • zmrlinux
  • zmrlinux
  • 2016年01月29日 18:03
  • 188

C++ 友元和继承

Note: Friendship is not inherited. Friends of the base have no special access to members of its deri...
  • sinat_24229853
  • sinat_24229853
  • 2015年03月15日 16:11
  • 682

组合类和友员类的差异有哪些(C++)

组合类与友员类都能够通过对象或成员函数访问其他相关类,但这两者有什么本质区别呢? 友元类通常是为了方便存取另一个类的私有数据成员而声明的,例如A是B的友元类,A可以存取B中的私有成员,但是类...
  • j2013210855
  • j2013210855
  • 2014年12月17日 14:15
  • 392
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++类的几个细节:友元和默认构造
举报原因:
原因补充:

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