-
Coder 繼承自 Staff class Coder : public Staff { };查看全部
-
可以看到,在 C++ 默認的復(fù)制模式之下,兩個對象中的 mem 指針指向了同一片內(nèi)存。因為 C++ 默認的復(fù)制模式只會簡單得把成員的值進行復(fù)制,面對這個 mem 指針,他只會把指針的值進行拷貝,最后的結(jié)果就是 mem 指針指向了同一片內(nèi)存。 這種拷貝方式,被稱之為淺拷貝查看全部
-
#include "Staff.hpp" #include <stdio.h> Staff::Staff(std::string _name, int _age) { mem = (char *)malloc(20); name = _name; age = _age; printf("構(gòu)造函數(shù)被調(diào)用\n"); } Staff::~Staff() { if(mem != nullptr){ free(mem); mem = nullptr; } printf("析構(gòu)函數(shù)被調(diào)用\n"); } 代碼塊預(yù)覽復(fù)制 在上面的代碼中,在類中定義了一個指針,在構(gòu)造函數(shù)中,通過 malloc 函數(shù)分配了一個 20 字節(jié)大小的堆內(nèi)存,然后將這片堆內(nèi)存的首地址賦值給了這個指針。在析構(gòu)函數(shù)中,我們將這片堆內(nèi)存釋放掉。查看全部
-
對象實例化的時候,會調(diào)用構(gòu)造函數(shù),而對象銷毀的時候,就會調(diào)用析構(gòu)函數(shù)。我們先來嘗試寫一個析構(gòu)函數(shù): Staff.hpp #include <string> class Staff { public: Staff(std::string _name, int _age); ~Staff(); public: std::string name; int age; }; 代碼塊預(yù)覽復(fù)制 Staff.cpp #include "Staff.hpp" #include <stdio.h> Staff::Staff(std::string _name, int _age) { name = _name; age = _age; printf("構(gòu)造函數(shù)被調(diào)用\n"); } Staff::~Staff() { printf("析構(gòu)函數(shù)被調(diào)用\n"); } 代碼塊預(yù)覽復(fù)制 調(diào)用代碼不改,然后再運行一下。我們發(fā)現(xiàn),程序在調(diào)用了構(gòu)造函數(shù)之后,又調(diào)用了析構(gòu)函數(shù)。 我們之前講過棧內(nèi)存,這個對象是分配在棧上面的,實例化的時候,調(diào)用了構(gòu)造函數(shù),而緊接著,main 函數(shù)就要結(jié)束了,這個棧對象就自動銷毀了,銷毀的時候,就調(diào)用了析構(gòu)函數(shù)。查看全部
-
此外,構(gòu)造函數(shù)是可以有參數(shù)的,我們常常用構(gòu)造函數(shù)來進行初始化。例如,我們可以利用構(gòu)造函數(shù)對 name 和 age 進行傳值。 Staff.hpp #include <string> class Staff { public: Staff(std::string _name, int _age); public: std::string name; int age; }; Staff.cpp #include "Staff.hpp" #include <stdio.h> Staff::Staff(std::string _name, int _age) { name = _name; age = _age; } 當(dāng)然,對于有參數(shù)的構(gòu)造函數(shù),調(diào)用的時候只要傳進去參數(shù)就行了?,F(xiàn)在,我們可以創(chuàng)建一個名叫 “mooc”,29 歲的員工了。 #include <stdio.h> #include "Staff.hpp" int main(int argc,char **argv) { Staff staff("mooc", 29); return 0; }查看全部
-
#include <string> class Staff { public: Staff(); }; 可以看到,這里定義了一個和名稱和類名相同,沒有返回值的函數(shù),這個函數(shù)稱為構(gòu)造函數(shù)。構(gòu)造函數(shù)的特殊之處在于,他會在類實例化的時候被調(diào)用查看全部
-
函數(shù)的重載 #include <string> class Staff { public: void FuncA(); void FuncA(int a); }; 這個類中,我們定義了兩個函數(shù),都叫做 FuncA,但是他們的參數(shù)不一樣,一個沒有參數(shù),一個參數(shù)是一個 int 類型的變量。這種情況下,兩個函數(shù)都是有效的。而在調(diào)用的時候,C++ 會根據(jù)調(diào)用者傳入的函數(shù)自行匹配相應(yīng)的實現(xiàn)。查看全部
-
成員函數(shù)的重載是指在同一個類中,函數(shù)名字相同,函數(shù)參數(shù)不同的函數(shù)。查看全部
-
嘗試在類的外部調(diào)用 private 修飾的 FuncB 函數(shù),就會發(fā)現(xiàn)編譯器報錯了。因為 private 修飾的函數(shù)只能在類中被其他成員函數(shù)調(diào)用,例如,可以在 FuncA 中調(diào)用 FuncB查看全部
-
成員函數(shù)同樣受到權(quán)限修飾符的限制查看全部
-
#include <string> class Staff { public: std::string name; int age; int PrintStaff(); }; 代碼塊預(yù)覽復(fù)制 在頭文件中,定義一個成員函數(shù),這個成員函數(shù)的功能是打印雇員的信息。而這個函數(shù)的實現(xiàn),是在 .cpp 文件里面實現(xiàn)的。 打開 .cpp 文件,先 include 頭文件,然后用以下的代碼對函數(shù)進行實現(xiàn)。 #include "Staff.hpp" int Staff::PrintStaff() { printf("Name: %s\n", name.c_str()); printf("Age: %d\n", age); return 0; }查看全部
-
protected 用來指定保護成員。一般是允許在子類中訪問查看全部
-
public 用來指定公有成員。一個類的公有成員在任何地方都可以被訪問。例如: class A { public: int a; int b; } 代碼塊預(yù)覽復(fù)制 用 public 修飾的,在外部是可以訪問的: int main(int argc,char **argv) { A a; a.a = 15; // 不會報錯,因為成員變量是 public 的 return 0; }查看全部
-
private 用來指定私有成員。一個類的私有成員,不論是成員變量還是成員函數(shù),都只能在該類的內(nèi)部才能被訪問查看全部
-
權(quán)限修飾符:private,public查看全部
舉報
0/150
提交
取消