1. 程式人生 > >c++ static、運算子過載

c++ static、運算子過載

1.static

  • 靜態資料成員
  • 靜態成員函式

使用場景: 即使不例項化物件,靜態成員iCount的值始終在記憶體中存在。 普通資料成員則不會。 靜態成員不依賴物件的例項化,它的例項化必須單獨進行,如上圖:int Tank::s_iCount = 0; 呼叫方法:
靜態成員函式無法呼叫非靜態的資料成員或成員函式: 因為靜態成員函式不傳入 this指標,無法確定是哪一個資料成員。 不過,靜態成員函式可以呼叫靜態資料成員,因為都是全域性的 總結:
  • 靜態資料成員必須單獨初始化
  • 靜態成員函式無法呼叫非靜態的資料成員或成員函式
  • 靜態資料成員只有一份,切不依賴物件存在(sizeof求的物件大小不包含靜態資料成員)

2.一元運算子過載

本質:函式過載 關鍵字:operator
成員函式過載:

友元函式過載:
++符號過載,分為前置++,後置++,後置++需要在引數列表中使用int作為標誌,且返回型別不再是引用,而是物件。如下圖為成員函式過載:                                                                                                    

3.二元運算子過載

”+“成員函式過載:

”+“友元函式過載:

函式定義:
”<<“輸出符號的友元函式過載:


使用效果:可以直接輸出物件成員的值
注:”<<“符不能使用成員函式過載,因為她的第一個物件必須是ostream的,成員函式過載第一個物件是一個this指標,指向當前物件。 ”[ ]“索引運算子只能使用成員函式過載,不能使用友元方式進行過載,因為第一個物件必須是this指標,指向當前物件。

相關推薦

c++ static運算子過載

1.static 靜態資料成員靜態成員函式 使用場景: 即使不例項化物件,靜態成員iCount的值始終在記憶體中存在。 普通資料成員則不會。 靜態成員不依賴物件的例項化,它的例項化必須單獨進行

c++——多型繼承運算子過載綜合例子程式碼

#include <iostream> #include <string.h> using namespace std; class A { private: char *name; public: A(char *n); v

c++單鏈表【建構函式運算子過載解構函式增刪查改等】

c++中的單向連結串列寫法:實現增刪查改、建構函式、運算子過載、解構函式等。建立標頭檔案SList.h#pragma once typedef int DataType; //SList要訪問SListNode,可以通過友元函式實現,友元函式在被訪問的類中 class SL

C/C++程式設計細節(三)——類繼承模板運算子過載

1、類、派生類       C++中類的概念很重要,重要到什麼程度呢?把class/struct看成和main同一個等級,為什麼這麼說呢?因為,C++中不允許全域性變數獨立於類外, 所以,在一個C+

《隨筆二十二》—— C++中的“ 運算子過載

目錄 前言 過載運算子的兩種形式 運算子成員函式  和 運算子友元函式的比較 前言 ● 為什麼要對運算子進行過載: C++預定義中的運算子的操作物件只侷限於基本的內建資料型別,但是對於我們自定義的型別是沒有辦法操作的。但是大多時候我們需

C++ 簡單的運算子過載小練習

#include <iostream> #include <string> #include <sstream> using namespace std; class MyShape { protected: int R_, G_, B

C++ staticconst和static const型別成員變數宣告及其初始化

C++ static、const和static const型別成員變數宣告及其初始化 const定義的常量在超出其作用域之後其空間會被釋放,而static定義的靜態常量在函式執行後不會釋放其儲存空間。 static表示的是靜態的。類的靜態成員函式、靜態成員變數是和類相關的,而不是和類的具

C++ 輸入輸出運算子過載 感想

在C++中,經常會對輸入輸出運算子進行過載,而在過載的時候用到了友元(Friends)和引用返回(Returning References),這裡對為什麼會這麼用發表一些思考。 比如,下面的類是一個簡單的Student類,其中過載了<<和>&

C++ staticconst和static const型別成員變數宣告以及初始化

下面的文章是我從網上找了好久,整理了好久的,對我有很大幫助,原址已經記不住了,算我自己原創的了哇! const定義的常量在超出其作用域之後其空間會被釋放,而static定義的靜態常量在函式執行後不會釋放其儲存空間。 static表示的是靜態的。類的靜態成員函式、靜態成員變

C++賦值運算子過載函式(operator=)

  由於對c++的過載符號一直不是很理解,此處參閱一些資料給出比較詳細的解釋,方便讀者以及自己查閱。 此處有更詳細的解釋,但是其中關於 a = b = c執行順序的解釋不正確! 例1 #include<iostream> #include&

C++_Operator Overloading(運算子過載 | 計算有理數的加減乘除)

// OperatorT.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> //運算子的過載 //計算有理數rational的 + - * / class Rational {

拷貝建構函式運算子過載深淺拷貝

#include<iostream> #include<string.h> using namespace std; class Student{ public: Student(){m_strName="Jim";}

C++中的運算子過載-1

Opencv學堂 http://mp.weixin.qq.com/s?__biz=MzA4MDExMDEyMw==&mid=100000109&idx=1&sn=7540b49e869c3e27f87c84f6f3dfe9a8&chksm

C++ 下標運算子 過載

我們常用下標運算子operator[]來訪問陣列中的某個元素.它是一個雙目運算子,第一個運算子是陣列名,第二個運算子是陣列下標.在類物件中,我們可以過載下標運算子,用它來定義相應物件的下標運算. 注意,C++不允許把下標運算子函式作為外部函式來定義,它只能是非靜態的成員函式

c++ -> 後置++運算子過載(單目運算子

我們知道一個數 a 實現自增1的方式有兩種: 1. a++        2. ++a同樣的如果像把它應用到c++運算子過載裡面,實現類的某些屬性的自增1操作,也應該有兩種形式之前我已經給過實現前置++運算子過載的方法了,沒看過的小夥伴可以戳這裡當我們想要實現後置++運算子的

C++基礎】----運算子過載(01)

一方面,在C++中,運算子過載( operator overloading)允許把標準運算子(如+  -  *  /  % 等)應用於自定義資料型別的物件。 這樣可以直觀自然地看出自定義資料型別間的運算,並且提高程式的可讀性。 另一方面,運算子過載僅僅是一種語法上的方便。

一文說盡C++賦值運算子過載函式(operator=)

寫在前面:       關於C++的賦值運算子過載函式(operator=),

C++的拷貝建構函式operator=運算子過載,深拷貝和淺拷貝explicit關鍵字

1、在C++編碼過程中,類的建立十分頻繁。 簡單的功能,當然不用考慮太多,但是從進一步深刻理解C++的內涵,類的結構和用法,編寫更好的程式碼的角度去考慮,我們就需要用到標題所提到的這些內容。 最近,在看單例模式,覺得十分有趣,然而如果想要掌握單例模式,就必須掌握這些內容。下

C++實現輸入輸出運算子過載友元函式和成員函式實現複數類Complex

今天答應幫朋友做一個C++題目,頗費了一番周折,終於還是寫出來了,讓很久沒敲程式碼的我反省了一下,也回憶了以前學過的知識。 題目要求如下: 一、按下列要求編制複數類,並除錯通過: 1)  基本的建構函式; 2)  成員運算子+、-實現複數的加減運算; 3)  友元運算子+

C++:面試時應該實現的string類(建構函式拷貝建構函式賦值運算子過載和解構函式)

一、string類的4個基本函式是什麼? 建構函式 拷貝建構函式 賦值運算子過載 解構函式 二、函式實現 1.建構函式 String(char* pStr = " ")