知識點1【強化訓練字串類string】
知識點2【繼承和派生的概述】(了解)1-2
繼承的優點:減少**的冗餘 提高**的重用性
知識點3【繼承的格式】
繼承方式分類:
父類個數分類:
注意:案例1:公有繼承 public
總結:案例2:保護繼承protected
總結: protected繼承
案例3:私有繼承 private
總結:private私有繼承
總結:知識點4【繼承的內層結構】(了解)(vs studio)
知識點5【繼承中的構造和析構的順序】
總結:知識點6【子類中 有父類、物件成員 構造和析構的順序】
總結:(重要)
知識點7【詳解 子類中的構造】
1、子類會預設呼叫 父類的 無參構造
2、子類 必須顯示 使用初始化列表 呼叫 父類的有參構造
知識點8【父類和子類的同名 成員變數 處理】
1、當 父類和子類 成員變數同名時 在子類就近原則 選擇本作用域的子類成員
2、如果在子類中 必須使用父類中的同名成員 必須加上父類的作用域。
3、子類可以借助 父類的公有方法 間接的操作 父類的私有資料(不可見的資料)
知識點9【父類和子類的同名 成員函式 處理】
案例:1子類繼承父類所有成員函式 和成員變數
案例2:子類和父類 同名成員函式
知識點1【強化訓練字串類string】
mystring.h
#ifndef
mystring_h #define mystring_h #include using namespace std;
class mystring ; #endif // mystring_h
mystring.cpp
#include
「mystring.h」 #include#include using
namespace std; mystring::mystring() mystring::mystring(const mystring &ob)
mystring::~mystring() } int mystring::size() char& mystring::operator(int
index)//index表示陣列的下標
else //根據ob.str的大小申請空間 this->str = new
char[ob.size+1]; strcpy(this->str,
ob.str); this->size =
ob.size; return *this; } mystring &mystring::operator=(const char
*str)
this->str = new char[strlen(str)+1]; strcpy(this->str, str); this->size = strlen(str); return *this; } mystring& mystring::operator+(const
mystring &ob) return newstring; } mystring &mystring::operator+(const char
*str) return newstring; } bool mystring::operator==(const mystring
&ob)
return false; } bool
mystring::operator==(const char *str)
return false; } ostream& operator<<(ostream &out, mystring
&ob) //獲取鍵盤輸入的字串 char buf[1024]="";//臨時buf in >> buf;//先得到鍵盤輸入的資料 然後根據buf的實際大小
開闢空間 ob.str = new
char[strlen(buf)+1]; strcpy(ob.str,
buf); ob.size = strlen(buf); return in; }
main.cpp
#include
#include"mystring.h" using namespace std; int main(int argc, char *ar**) ; class
子類: 繼承方式 父類名;
繼承方式分類:
public : 公有繼承 (重要)
private : 私有繼承
protected : 保護繼承
父類個數分類:
單繼承:指每個派生類只直接繼承了乙個基類的特徵 (乙個父類 派生出 乙個子類)
多繼承:指多個基類派生出乙個派生類的繼承關係,多繼承的派生類直接繼承了不止乙個基類的特徵(多個父類 派生出 乙個子類)
注意:子類繼承父類,子類擁有父類中全部成員變數和成員方法(除了構造和析構之外的成員方法),但是在子類中,繼承的成員並不一定能直接訪問,不同的繼承方式會導致不同的訪問許可權。
案例1:公有繼承 public
//設定乙個父類 class base ; //設定乙個子類
class son:public base };
void test01() }; void test02()
總結: protected繼承
父類中的public資料
在子類中 也是protected
父類中的private資料 在子類中 是不可見的
父類中的protected資料
在子類中 是protected的
(保護繼承 父類的私有資料 在子類中 不可見 其他資料 都變保護)
案例3:私有繼承 private
//保護繼承 class son2:private base }; void test03()
總結:private私有繼承
父類中的public資料 在子類中 也是private
父類中的private資料
在子類中 是不可見的
父類中的protected資料
在子類中 是private的
(私有繼承 父類中的私有資料在子類中 不可見 其他變成私有)
總結:不管啥繼承方式:父類中的私有資料在 子類中不可見
知識點4【繼承的內層結構】(了解)(vs studio)
class base ;
class son :public base ; int main(int
argc, char* ar**)
步驟:cl /d1
reportsingleclasslayoutson test.cpp
son類的布局:
知識點5【繼承中的構造和析構的順序】
class base
class base {
private: int a; public: base()
{ cout<<「父類的無參建構函式」cout<<「父類的有參建構函式」cout<<「子類的有參建構函式 int
int」《執行結果:
案例提高:
如果父類有參構造:
base(int a, int data) { this->a = a; this->data = data; cout<<「父類的有參建構函式」《子類想呼叫 父類有參構造:
//子類必須用
初始化列表 顯示的呼叫父類的有參構造 //父類名稱(引數) son(int a,int b, int c):base(a,c),b(b)//顯示的呼叫父類的有參構造 { //this->b = b; cout<<「子類的有參建構函式 int int」<
知識點8【父類和子類的同名 成員變數 處理】
1、當 父類和子類 成員變數同名時 在子類就近原則 選擇本作用域的子類成員
2、如果在子類中 必須使用父類中的同名成員 必須加上父類的作用域。
class base
{ //父類的私有資料 一旦涉及繼承 在子類中不可見 public: int num; public: base(int num) {
this->num = num;
cout<<「base有參構造int」執行結果:
3、子類可以借助 父類的公有方法 間接的操作 父類的私有資料(不可見的資料)
class base
{ private: int num;//父類的私有資料 一旦涉及繼承 在子類中不可見 public: base(int
num) { this->num = num; cout<<「base有參構造int」知識點9【父類和子類的同名 成員函式 處理】
案例:1子類繼承父類所有成員函式 和成員變數
class base {
public: void func(void) {
cout<<「父類中的void
func」《案例2:子類和父類 同名成員函式
class base {
public: void func(void) {
cout<<「父類中的void
func」《執行結果:
C static在c 中的運用(強化記憶)
一.static file static 檔案內靜態定義 未命名的命名空間取代檔案中的靜態宣告 在標準c 引入命名空間的概念之前,程式需要將名字宣告成static的以使其對於整個檔案有效。在檔案中進行靜態宣告的做法是從c語言繼承而來的。在c語言中,宣告為static的全域性實體在其他檔案外不可見。w...
c 基礎 方法(函式)
方法就是將一堆 進行重用的一種機制。方法就是一段 這段 可能有輸入的值 引數 可能會有返回值。乙個方法就想乙個專門做這件事的人,我們呼叫它來完成一些事情,它可能需要我們提供一些資料給它,它執行完後可能會有一些執行結果給我們。要求的資料就叫引數,返回的執行結果就是返回值。string s consol...
c語言函式的運用
1.猜數字遊戲 將選單和執行猜數字的主體都用main函式以外的自定義函式編寫,再由main函式呼叫後,執行結果 define crt secure no warnings include include include int menu return i int prtnum return gues...