C++程序基礎(chǔ)知識說明
也許大家對于C++程序還不是很了解,看完本文后對您一定會大有幫助,下文除了學(xué)習(xí)C++程序的基本性質(zhì)外還對C++程序的新特性進(jìn)行全面研究,希望能給大家?guī)碛杏玫男畔ⅰ?/P>
- class A
- {
- };
- main()
- {
- A a;
- cout<<sizeof(a)<<endl;
- }
C++程序的知識很多,有四庫全書《C++程序設(shè)計(jì)》,《C Primer》,這本文章只想談?wù)勎覀€人所看到的用到的知識。加上自己的理解。很多東西可能沒有系統(tǒng)化,而且,知識也是想到那寫到那。
首先談?wù)?類的對象的大小,
- class A
- {
- };
- main()
- {
- A a;
- cout<<sizeof(a)<<endl;
那么:
- class A
- {
- char m;
- };
- main()
- {
- A a;
- cout<<sizeof(a)<<endl;
- }
會打印結(jié)果為多少啊。這個問題叫Alignment,有一次,我就遇到這樣郁悶的問題,我們的工程中代碼都是用數(shù)組傳送數(shù)據(jù),比如坐標(biāo) x,y,那么就這樣賦值
- *(int *)&w[0]=x;
- *(int *)&w[4]=y;
(或許大家很少用),這樣的代碼有一個缺點(diǎn),送數(shù)據(jù),取數(shù)據(jù)十分不方便,而且,由于有下標(biāo),因此,代碼不好利用循環(huán)結(jié)構(gòu)(還有不是四位的數(shù)據(jù)) 。只能一位一位的賦值,還有一個問題,就是,當(dāng)工程一個約定變了的時候,所有的代碼都要改動。不好reuse。
因此,我希望借助結(jié)構(gòu)strcut,或者class來改造程序代碼,但是就遇到數(shù)據(jù)對齊問題。
比如,我定義一個C++程序結(jié)構(gòu):
- struct A
- {
- char type;
- int y;
- };
- char buf[MAX];
- A a;
- memcpy(buf,&a,sizeof(a));
但是,卻發(fā)現(xiàn)buf[]的內(nèi)容有三個不是我需要的內(nèi)容。其實(shí),我看了一些資料,說這是為了字節(jié)對齊,CPU存取數(shù)據(jù)是按照四位存取,這樣,就不會取四位數(shù)據(jù),一位是char type,三位是y的數(shù)據(jù)。作為編程者對這個有可能就不熟悉。
還有類似的問題,以后,再敘。類的數(shù)據(jù)的訪問權(quán)限數(shù)據(jù)有三種權(quán)限:public,private,protected。C++程序是面向?qū)ο蟮恼Z言,因此,它的許多概念來源于現(xiàn)實(shí)生活。比如這個權(quán)限問題就可以這么解釋。基本類相當(dāng)于父親,子類相當(dāng)于孩子。
還有一個友元類,相當(dāng)于朋友。比如,對于父親有的東西(成員變量)是對任何人都共享的,大家都可以知道的,不是什么秘密。那么,用public來描述這樣的東西。如果,有的東西,是只有不是外人不能知道的。
也就是,兒子,好朋友都可以分享的秘密的話,那么,這樣的東西用protected描述。同樣,還有的東西,大人不想讓小孩知道,但是,卻對好朋友不保留,這樣的事情,在現(xiàn)實(shí)生活中也是有的,那么,這樣的用private描述。
【編輯推薦】