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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 不懂的地方 记录01

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

    以上疑惑在(C++ 有參構造 無參構造 拷貝構造 以及參數化列表 成員對象之間的執行關系)進行了解答。

  • C++ 靜態成員對象與非靜態成員對象 內存分配 以及 聲明定義的區別?
    靜態成員對象是存儲在內存中的全局數據區嗎?
    靜態成員變量在類中聲明 類外初始化,
    那么而 非靜態成員變量如果創建對象的話,在類內是不是僅僅只是聲明.?
  • class Printer { private:static int count = 0; // 為什么這樣不可以? };class Printer { private:int count = 0; //這樣就可以? };
  • 教程說:
    子類不會繼承 父類中的構造和析構函數,只有父類自己才知道如果構造和析構自己的屬性
    那么疑問:子類會繼承 賦值函數嗎?
  • #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; // 這樣會調用父類的無參構造Son s1(s); // 這樣會調用父類的拷貝構造//Son s("Tom", 2); // 這樣報錯, 因為子類根本不會繼承父類的構造函數 } void test2() {} int main() {//test1();return 0; } Son s; // 這樣會調用父類的無參構造 Son s1(s); // 這樣會調用父類的拷貝構造 雖然說沒有繼承,但是還是調用了 父類的方法

    在C++中,構造函數不會自動繼承,只是如果子類沒有寫構造函數,那么系統會這個類自動添加一個默認構造函數,是一個空函數體,所以什么也沒有做,接著就會調用父類的構造函數,所以你覺得是繼承了父類的構造函數。 子類和父類的構造函數的調用順序:

    class B:public A B b1;

    那么構造函數的調用順序是:A(),B()

    如果不想調用基類的構造函數,那么就應該在子類中寫一個構造函數。

    總結

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

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