C++ 第三十四天:类相关的一些内容

复习

// 以下内容含个人见解

Ⅰ、有时不得不用到“构造函数初始值列表”,原因是有些编译器不支持类内初始值,这样做可以避免在函数体内初始化。

需要注意的是:被初始化列表忽略的数据成员将被默认初始化(结果取决于位置,可能产生可怕后果)。下面是构造器的 N 种情况:

  1. 程序员直接忽略构造器 --> 产生默认合成的构造函数 --> 成员被默认初始化 --> 不确定的结果。
  2. 给数据成员提供初始值(Java 中所谓的属性初始化),不写构造函数 --> 默认合成的构造函数使用提供的初始值初始化对应的成员 --> 被忽略的成员被默认初始化。
  3. 不使用类内初始值,而采用构造函数初始值列表 --> 被忽略的成员被默认初始化。、
  4. ·····

情形多的让人头晕,倒不如记一下比较好的实践:提供类内初始值 + 显示地初始化没有类内初始值的每个成员。

总结起来就是:确保每个成员在创建后都有一个确定的值,但是又不要重复初始化(重复初始化:类内初始值与构造函数赋值相同)。

Ⅱ、拷贝、赋值、析构也是有合成版本的!

如果没写的话,编译器都会替我们做,但是某些情形我们不能依赖合成的版本:

那就是 - 管 - 理 - 动 -  态 - 内 - 存 的类!!!( 手动强调,类包含 string 和 vector 除外)

方法论总结:

  1. 通常情况下都不需要手动去写。
  2. 在合适的情况下,尽可能用 string 和 vector 来动态分配内存!

Ⅲ、友元函数需要在类外部再专门进行一次声明。举例:

class.h

#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED

class Person {
friend int getNo(const Person&);
private:
        int no = 48;
};

int getNo(const Person&); // necessary

#endif

class.cpp

#include "class.h"

int getNo(const Person& x) {
    return x.no;
}

main.cpp

#include "class.h"
#include <stdio.h>

int main()
{
    Person p;
    printf("%d\n", getNo(p));
    return 0;
}

运行结果:

[email protected]:~/cprg# g++ -std=c++11 main.cpp class.cpp
[email protected]:~/cprg# ./a.out
48

相关阅读:

时间: 2024-10-12 11:07:23

C++ 第三十四天:类相关的一些内容的相关文章

QT开发(三十四)——QT多线程编程

QT开发(三十四)--QT多线程编程 一.QT多线程简介 QT通过三种形式提供了对线程的支持,分别是平台无关的线程类.线程安全的事件投递.跨线程的信号-槽连接. QT中线程类包含如下: QThread 提供了开始一个新线程的方法    QThreadStorage 提供逐线程数据存储    QMutex 提供相互排斥的锁,或互斥量    QMutexLocker 是一个辅助类,自动对 QMutex 加锁与解锁    QReadWriterLock 提供了一个可以同时读操作的锁    QReadL

Java进阶(三十四)Integer与int的种种比较你知道多少?

Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱.所以我对它们进行了总结,希望对大家有帮助. 首先看代码: package

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

第三十四天 我为集成平台狂(七)-步履轻盈的JQuery(五)

7月13日,晴."别院深深夏席清,石榴开遍透帘明. 树阴满地日当午,梦觉流莺时一声." 在JQuery的法则里,风格重于一切,IT牛人们从来没有把自己束缚在一张乏味的表单上,怀着对JavaScript的理解,在不断的尝试中寻求着转化的灵感. 大多购票.旅游网站上都提供了一个城市和日期输入查询的功能.用户在输入框中只需输入城市的拼音或者简称就可以弹出相关城市的名称,选择日期时则是出现一个月的日历控件,只需点选日期即可,整个操作一目了然. 本文讲解如何使用jQuery实现城市查询和日历显示

三十四、Linux系统任务计划cron、chkconfig工具、systemd管理服务、unit介绍

三十四.Linux系统任务计划cron.chkconfig工具.systemd管理服务.unit介绍.target介绍 一.Linux系统任务计划cron crontab命令:对任务计划功能的操作用此命令.选项: -u:指定某个用户,不加-u则为当前用户. -e:制定任务计划. -l:列出任务计划. -r:删除任务计划. 任务计划的配置文件:/etc/crontab 文件内共有五个字段. 从左往右依次为:分.时.日.月.周.用户.命令. 可以不指定用户就是root. # crontab -e  

Android项目实战(三十四):蓝牙4.0 BLE 多设备连接

原文:Android项目实战(三十四):蓝牙4.0 BLE 多设备连接 最近项目有个需求,手机设备连接多个蓝牙4.0 设备 并获取这些设备的数据. 查询了很多资料终于实现,现进行总结. -------------------------------------------------------------------------------------------------------------------------------------------------------------

第三十四章

11 道渢(fēng)呵,其可左右也.万物恃之以生而不辞,成功遂事而弗名有也.万物归焉而弗为主.则恒无欲也,可名于小.万物归焉而弗为主,可名于大.是以圣人之能成大也,以其不为大也,故能成大. 第三十四章1 相当比例的人,因占有心而生病 道渢呵,其可左右也.万物恃之以生而不辞(帛书未见此句),成功遂事而弗名有也.万物归焉而弗为主.则恒无欲也,可名于小. 道广泛盛大,充满左右无处不在.它生养万物而不推辞这个庞大的工作,完成了这些事而不说是自己所拥有的.万物源于它但它不说自己是主人.道没有欲望,所以可

centos 监控cacti/nagios/zabbix 第三十四节课

centos   监控cacti/nagios/zabbix   第三十四节课 上半节课 下半节课 f

JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫

JAVA之旅(三十四)--自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫 我们接着来说网络编程,TCP 一.自定义服务端 我们直接写一个服务端,让本机去连接,可以看到什么样的效果 package com.lgl.socket; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; publ