【C++初阶】第四站:类和对象(下)(理解+详解)

马肤
这是懒羊羊

前言:

本篇知识点:初始化列表、explicit关键字、static成员、友元、内部类、匿名对象、编译器的优化

专栏:C++初阶

目录

再谈构造函数

1️⃣构造函数体赋值

2️⃣初始化列表

explicit关键字

static成员

1.static概念

2.static特性

面试题

友元 

友元函数

友元类

内部类

内部类概念

优化面试题

匿名对象

 匿名对象和有名对象

拷贝对象时的一些编译器优化

知识点回顾:

示例(包含讲解): 

传值传参和传值返回

构造+拷贝构造

连续的拷贝构造

拷贝构造+赋值重载(无法优化) 

再次理解类和对象


再谈构造函数

        对于MyQueue 不需要写它的构造函数,编译器自动生成,会调用它的默认构造。

但是如果Stack类不提供默认构造给你,那就得实现显示调用,该怎么办呢?

有两种办法。

1️⃣构造函数体赋值

在创建对象时,编译器通过调用 构造函数,给对象中各个成员变量一个合适的初始值。 代码示例:
class Date
{
public:
    Date(int year, int month, int day)
    {
         _year = year;
         _month = month;
         _day = day;
     }
private:
    int _year;
    int _month;
    int _day;
};
        虽然上述构造函数调用之后,对象中已经有了一个初始值,但是 不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为 赋初值,而不能称作 初始化。 因为初始化只能初始化一次,而构造函数体内可以多次 赋值 。 如下例子:
​class Date
{
public:
    Date(int year=2024, int month=1, int day=1)//构造函数初始化,只能初始化一次
     //赋值
    {
         _year = year;//可以多次赋值
        _year = 2023; 
        _year = 2021; 
        //...
        _month = month;
         _day = day;
     }
private:
    int _year;
    int _month;
    int _day;
};

2️⃣初始化列表

初始化列表:以一个 冒号 开始,接着是一个以 逗号 分隔的数据成员列表,每个"成员变量"后面跟 一个放在括号中的初始值或表达式。 代码如下:
#include
using namespace std;
class Date
{
public:
	Date(int year, int month, int day)
		: _year(year)
		, _month(month)
		, _day(day)
	{
        }
	void Print()
	{
		cout 

文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码