日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

对象特性--构造函数调用规则

發布時間:2023/11/27 生活经验 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对象特性--构造函数调用规则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

默認情況下,C++編譯器至少給一個類添加3個函數:

1.默認構造函數(無參,函數體為空)
2.默認析構函數(無參,函數體為空)

3.默認拷貝構造函數,對屬性進行值拷貝

1、創建一個類,C++編譯器會給每個類都添加至少3個函數

#include<iostream>
using namespace std;//構造函數的調用規則
//1、創建一個類,C++編譯器會給每個類都添加至少3個函數
// 默認構造(空實現)
//析構函數(空實現)
//拷貝構造(值拷貝)I
class Person
{
public:Person(){cout << "Person無參構造函數的調用" << endl;}Person(int age){cout << "Person有參構造函數的調用" << endl;m_Age = age;}/*Person(const Person& p)        //這塊拷貝構造函數是被注釋掉的  但是輸出結果的話  看下圖{cout << "Person拷貝構造函數的調用" << endl;m_Age = p.m_Age;}*/~Person(){cout << "Person析構函數的調用" << endl;}int m_Age;
};void test01()
{Person p;p.m_Age = 18;Person p1(p);cout << "p2的年齡是: " << p1.m_Age << endl;
}int main()
{test01();system("pause");return 0;
}

運行結果如下:

相當于就是編譯器給類中自動填補了一個拷貝函數

2.如果在僅僅類中寫了有參構造函數,那么編譯器就不會再提供默認構造函數,依然提供拷貝構造函數

#include<iostream>
using namespace std;class Person
{
public:Person(int age)     //有參構造函數{cout << "Person有參構造函數的調用" << endl;m_Age = age;}~Person()   //析構函數{cout << "Person析構函數的調用" << endl;}int m_Age;
};void test02()
{Person p;}int main()
{test02();system("pause");return 0;
}

上述代碼僅有有參構造和析構函數,調試:

?會發現沒有默認構造函數,印證了上述規則

將上述test02中的代碼更換為如下:

void test02()
{Person p(18);Person p2(p);cout << p2.m_Age << endl;}

執行:::

?會發現類中沒有拷貝構造函數,但是運行依然OK

規則:如果在僅僅類中寫了有參構造函數,那么編譯器就不會再提供默認構造函數,依然提供拷貝構造函數

3.如果我們寫了拷貝構造函數,編譯器將不會早為我們提供普通構造函數(默認構造和有參構造)

class Person
{
public://該類中現在只有拷貝構造和析構Person(const Person & p){cout << "Person有參構造函數的調用" << endl;}~Person(){cout << "Person析構函數的調用" << endl;}int m_Age;
};void test02()
{Person p(18);Person p1;}

調試會報錯如下:

?會報錯顯示為沒有默認構造函數和有參構造函數

總結一下:每個類中都會有三種函數

1.如果在僅僅類中寫了有參構造函數,那么編譯器就不會再提供默認構造函數,依然提供拷貝構造函數

2.如果我們寫了拷貝構造函數,編譯器將不會早為我們提供普通構造函數(默認構造和有參構造)

下篇,構造析構函數完結篇---->深拷貝與淺拷貝

《千與千尋》中有句臺詞我特別喜歡:何時看見都告訴自己:要加油。小千在面對突如其來的改變,選擇的是勇敢,還有那份執著。

總結

以上是生活随笔為你收集整理的对象特性--构造函数调用规则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。