Time of Update: 2018-12-05
原文:http://blog.csdn.net/jiangnanyouzi/article/details/3721091#reply在《深度探索C++物件模型》裡,有一個問題,也是去公司面試的時候那些技術人員常問的問題:在C++中,obj是一個類的對象,p是指向obj的指標,該類裡面有個資料成員mem,請問obj.mem和p->mem在實現和效率上有什麼不同。答案是:只有一種情況下才有重大差異,該情況必須滿足以下3個條件:(1)、obj
Time of Update: 2018-12-05
1、c++實現多態的方法其實很多人都知道,虛函數在c++中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c++其中一篇文章裡面可以知道:是每個類用了一個虛表,每個類的對象用了一個虛指標。具體的用法如下:class A{public: virtual void f(); virtual void g();private: int a};class B : public A{public: void g();private: int
Time of Update: 2018-12-05
#include<stdio.h> /*函數power測試*/int power(int m,int n);main(){ int i; for(i=0;i<10;++i) printf("%d %d %d/n",i,power(2,i),power(-3,i)); return 0;}/*power函數:求底數的n次冪,其中n>=0*/int power(int base,int n){ int i,p; p=1;
Time of Update: 2018-12-05
這個問題在昨天工作中遇到,先記一下自己的探索的結果。大致問題如下:程式有3個檔案組成,如下顯示(工作項目當然要保密的嘛,所以另外自己寫了個最簡單的小程式來說明問題)/* fun.h */#ifndef FUN_H#define FUN_H#include <stdio.h>void fun(int f);#endif/* fun.c */#include "fun.h"void f(int f){ printf("f is %d/n", f);}/* main.c */#includ
Time of Update: 2018-12-05
下面的C++代碼定義了一個類Point:class Point{public: Point(float xval); virtual ~Point(); float x() const; static int PointCount();protected: virtual ostream& print( ostream &) const; float _x; static int _point_count;};
Time of Update: 2018-12-05
這篇筆記說的是關於c/c++中的類型轉換的東西,重點是與指標有關的類型。1、強制類型轉換看一下這個c代碼:int a = 0x123456; //0x是十六進位的標記法char c = (char)a;printf("%d/n", c);在我的編譯環境裡輸出的是什麼呢? 是86,怎麼得來的呢?(我的編譯環境見“概述”)int a的記憶體如下(左邊是低地址的內容,右邊是高地址的內容):0x56 0x34 0x12 0x00"是不是搞反了?"
Time of Update: 2018-12-05
實驗一:for(i=0;i<lim-1&&(c=getchar())!='/n'&&c!=EOF;++i)不使用&&與||的等價迴圈語句enum loop { NO,YES};enum loop okloop = YES; i=0;whhile(okloop == yes)if(i>=lim-1) // outside of valid range ? okloop = NO;else if((c=getchar())=='/n'
Time of Update: 2018-12-05
在C語言裡面,有時候為了方便(方便的同義字是偷懶),函數就直接在標頭檔裡面實現了。那麼這樣子有什麼問題呢?下面舉個例子,這個例子只有3個檔案/* fun.h */#ifndef FUN_H#define FUN_Hvoid base(){};void fun();#endif /* fun.c */#include "fun.h"void fun(){ base();}/* main.c */#include "fun.h"int main(){ fun(); return 0
Time of Update: 2018-12-05
實驗一:#define YES 1#define NO 0 /*htoi:convert hexadecimal string s to integer*/int htoi(char s[]){ int hexdigit,i,j,inhex,n; i=0; if(s[i]=='0'){ //skip optional 0x or 0X ++i; if(s[i]=='x'||s[i]=='X') ++i; } n=0;
Time of Update: 2018-12-05
本系列文章是對Lippman的《深度探索c++物件模型》(“Inside the c++ object model”)的讀書筆記。1、關於作者Lippman:c++首個編譯器的開發人員之一,所作的c++方面的書籍有:《c++ primer》:c++的百科全書,和c++之父的《c++ programming language》齊名。《Inside the c++ object model》:講述c++文法的底層機制的。《Essential c++》:c++入門級的書籍,也可以算是《c++
Time of Update: 2018-12-05
因為我看C++物件模型的時候,遇到了幾個記憶體布局都是有關於對齊的一些細節,故此對結構體對齊再做一份小結,有人說:結構體對齊這個東西是依賴於編譯器的,因此不用去研究,真的嘛? 也許是,也許不是,要看你是做那個行業的了,如果你是做系統地層,網路通訊,嵌入式系統的,一個位元組的節省,也許對你是很大的期望呢。雖然具體的對齊是因編譯器而異,但是對齊的基本原理是不變的,那個原理也許能指導我們編寫程式的時候按照某個原則去進行。 不過,既然你用到了C或者C++,就多數是和系統底層有緣之人了,你說是嘛?呵呵。
Time of Update: 2018-12-05
1、c++實現多態的方法其實很多人都知道,虛函數在c++中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c++其中一篇文章裡面可以知道:是每個類用了一個虛表,每個類的對象用了一個虛指標。具體的用法如下:class A{public: virtual void f(); virtual void g();private: int a};class B : public A{public: void g();private: int
Time of Update: 2018-12-05
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 面試的時候經常有人問:c++中,怎麼才能不通過public函數來取得private的資料成員?當然,答案很多,比如如下的兩個方法:(1)、#define private public;#define class
Time of Update: 2018-12-05
在c++裡面,struct 和 class
Time of Update: 2018-12-05
以前在學校學習C語言的時候一直搞不懂那個共用體union有什麼用的。工作之後才發現它的一些妙用,現舉例如下:1. 為了方便看懂代碼。比如說想寫一個3 * 3的矩陣,可以這樣寫:[註:下面用紅色部分標記的地方是後來添加上去的,謝謝yrqing718的提醒!]struct Matrix{ union { struct { float _f11, _f12, _f13, _f21, _f22, _f23, _f31, _f32, _f33;
Time of Update: 2018-12-05
在初學資料結構的時候,第一個要學的就是鏈表,然而,當時我的注意力都是集中在鏈表的實現上,比如鏈表的初始化,增刪查改的操作實現等,沒留意到鏈表在實際應用時如何使他更具一般化,使代碼能重用。現在工作一年之餘,順便小結一下鏈表的幾種用途,以便以後查看。1.
Time of Update: 2018-12-05
A、基礎知識 類的虛函數表是一塊連續的記憶體,每個記憶體單元中記錄一個JMP指令的地 注意的是,編譯器會為每個有虛函數的類建立一個虛函數表,該虛函數表將被該類的所有對象共用。類的每個虛成員佔據虛函數表中的一行。如果類中有n個虛函數,那麼其虛函數表將有n*4位元組的大小。 虛函數(Virtual
Time of Update: 2018-12-05
大部分的操作符是可以被重載的,例外的只有“.”、“::”、“?:”和“sizeof”。沒有什麼非禁止operator?:重載的理由,只不過沒有必要而已。另外,expr1?expr2:expr3的重載函數無法保證expr2和expr3中只有一個被執行。 而“sizeof”無法被重載是因為不少內部操作,比如指標加法,都依賴於它,例如: X a[10]; X* p = &a[3]; X* q = &a[3]; p++; // p points to a[4] // thus the
Time of Update: 2018-12-05
在這裡,我向大家介紹關於一套C++ Socket類,讓你可以輕鬆的在Windows程式中使用Sockets。另外,我要感謝Fabien Le Lez、www.infflux.com、和Tamas Kaskoto等一切完善這套源碼的朋友。 這裡實際有四個類組成: 1、Socket(基類) 2、SocketServer(衍生類別) 3、SocketClient(衍生類別) 4、SocketSelect(友元)
Time of Update: 2018-12-05
-------------------------------原理------------------------------- 某些人認為不應該在建構函式中使用this指標,因為這時this對象還沒有完全形成。 但是,只要小心,是可以在建構函式中使用this指標的: ●在函數體中 ●初始化列表中 因為“對象還沒有完全形成”不意味著“什麼都沒有”。