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