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