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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 不懂的地方 记录01

發(fā)布時間:2023/11/30 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 不懂的地方 记录01 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • C++ 中初始化列表, 的詳細(xì)使用?
  • 沒有默認(rèn)構(gòu)造函數(shù)的類類型,因為使用初始化列表可以不必調(diào)用默認(rèn)構(gòu)造函數(shù)來初始化,而是直接調(diào)用拷貝構(gòu)造函數(shù)初始化 這句話不是很理解
  • //手機(jī)類 class Phone { public:Phone(string pName){cout << "Phone的構(gòu)造函數(shù)調(diào)用" << endl;m_PhoneName = pName;}Phone(const Phone &p) { //拷貝構(gòu)造函數(shù) m_PhoneName = p.m_PhoneName;}~Phone(){cout << "Phone的析構(gòu)函數(shù)調(diào)用" << endl;}string m_PhoneName; //手機(jī)名稱 };void test02() {Phone *p1 = new Phone("vivo"); // 這里的內(nèi)存分配情況?????????? }

    以上疑惑在(C++ 有參構(gòu)造 無參構(gòu)造 拷貝構(gòu)造 以及參數(shù)化列表 成員對象之間的執(zhí)行關(guān)系)進(jìn)行了解答。

  • C++ 靜態(tài)成員對象與非靜態(tài)成員對象 內(nèi)存分配 以及 聲明定義的區(qū)別?
    靜態(tài)成員對象是存儲在內(nèi)存中的全局?jǐn)?shù)據(jù)區(qū)嗎?
    靜態(tài)成員變量在類中聲明 類外初始化,
    那么而 非靜態(tài)成員變量如果創(chuàng)建對象的話,在類內(nèi)是不是僅僅只是聲明.?
  • class Printer { private:static int count = 0; // 為什么這樣不可以? };class Printer { private:int count = 0; //這樣就可以? };
  • 教程說:
    子類不會繼承 父類中的構(gòu)造和析構(gòu)函數(shù),只有父類自己才知道如果構(gòu)造和析構(gòu)自己的屬性
    那么疑問:子類會繼承 賦值函數(shù)嗎?
  • #include <string> #include <iostream> using namespace std; class Base { public:char* m_name;int m_age;Base() {cout << "Base no pattern create" << endl;const char* nametemp = "def";this->m_name = new char[strlen(nametemp) + 1];strcpy(this->m_name, nametemp);this->m_age = 18;}Base(const char *name, int age) {cout << "Base use pattern create" << endl;this->m_name = new char[strlen(name) + 1];strcpy(this->m_name, name);this->m_age = age;}Base(const Base & b) {cout << "Base copy create" << endl;this->m_name = new char[strlen(b.m_name) + 1];strcpy(this->m_name, b.m_name);this->m_age = b.m_age;}Base& operator=(const Base & b) {cout << "Base = fun" << endl;this->m_name = new char[strlen(b.m_name) + 1];strcpy(this->m_name, b.m_name);this->m_age = b.m_age;return *this;}~Base() {cout << "Base delete" << endl;if (this->m_name != NULL) {delete[] this->m_name;this->m_name = NULL;}} };class Son : public Base { public:int m_id;}; void test1() {/*Son s;cout << s.m_age << endl;*/Son s; // 這樣會調(diào)用父類的無參構(gòu)造Son s1(s); // 這樣會調(diào)用父類的拷貝構(gòu)造//Son s("Tom", 2); // 這樣報錯, 因為子類根本不會繼承父類的構(gòu)造函數(shù) } void test2() {} int main() {//test1();return 0; } Son s; // 這樣會調(diào)用父類的無參構(gòu)造 Son s1(s); // 這樣會調(diào)用父類的拷貝構(gòu)造 雖然說沒有繼承,但是還是調(diào)用了 父類的方法

    在C++中,構(gòu)造函數(shù)不會自動繼承,只是如果子類沒有寫構(gòu)造函數(shù),那么系統(tǒng)會這個類自動添加一個默認(rèn)構(gòu)造函數(shù),是一個空函數(shù)體,所以什么也沒有做,接著就會調(diào)用父類的構(gòu)造函數(shù),所以你覺得是繼承了父類的構(gòu)造函數(shù)。 子類和父類的構(gòu)造函數(shù)的調(diào)用順序:

    class B:public A B b1;

    那么構(gòu)造函數(shù)的調(diào)用順序是:A(),B()

    如果不想調(diào)用基類的構(gòu)造函數(shù),那么就應(yīng)該在子類中寫一個構(gòu)造函數(shù)。

    總結(jié)

    以上是生活随笔為你收集整理的C++ 不懂的地方 记录01的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。