查看完整版本 : 一大堆 C++ 問題...

ghostkcleung 2017-11-29 06:13 PM

一大堆 C++ 問題...

[align=left]啲語法好多都唔記得咗,[/align]

[align=left]要逐樣問,唔好介意,[/align]

[align=left]唔好叫我 Google...[/align]

[align=left]我個 B class 裡面有個 A class,[/align]

[align=left]有咩方法可以唔用 A *a 去 declare 呢個 member ? 而唔會觸發 Constructor ? 因為我想[/align]

[align=left]A a ;[/align]
[align=left]B b = B ( a ) ;[/align]
[align=left]cout << b.a.x ;[/align]
[align=left]// ----------[/align]

[align=left]class A {[/align]
[align=left]  public:[/align]
[align=left]  A ( ) {[/align]
[align=left]      cout << "A constructor." ;[/align]
[align=left]   }[/align]

[align=left]  int x=5;[/align]
[align=left]}[/align]

[align=left]class B {[/align]
[align=left]   public:[/align]
[align=left]   B ( A a ) {[/align]
[align=left]     this -> a = a ;[/align]
[align=left]   }[/align]

[align=left]   A a ; // 我唔想呢度觸發 constructor[/align]
[align=left]   // 又唔想 A *a;[/align]
}

[[i] 本帖最後由 ghostkcleung 於 2017-11-29 06:18 PM 編輯 [/i]]

Susan﹏汪汪 2017-11-29 06:30 PM

點解要咁做?
唔initialize所有properties係不良習慣

汪汪慣左swift嚴謹風格
Swift裡面呢類情況只有用optional

換成C++的說法就係
用A *a
或者黑魔法D用flag加union

ghostkcleung 2017-11-29 06:57 PM

諗錯咗方向,
原來 C++ 係要有好多 * 同埋 ->

[[i] 本帖最後由 ghostkcleung 於 2017-11-29 07:30 PM 編輯 [/i]]

煙民母親生賤種 2017-11-30 03:02 AM

唔用  pointer 根本無可能做到唔 trigger constructor, contructor 的目的就係 instantiate 時自動 run 的 function。C++ 有度衰, 就係用 A a 呢種寫法就等於 create 左個 object, 所以寫程式時比較麻煩, 好難安排得好。唔似 c# , java 呢類咁, 可以 A a, 之後在要 instantiate 的地方才 new A();

其實無乜必要真係唔建議用屍加加。:fst_016:再者, typing work 又多, 因為佢用 forward declaration, 所以一般要先寫 header .h , 之後再在 .cpp 度 implentment, 即係再寫多次同樣野。如果細 app, 直接在 .cpp 寫哂所有野, 就一定要跟次序。例如:

void functionA()
{
//do something;
}

void functionB()
{
functionA();
}

如果先寫 functionB , 之後才寫 functionA, 又會出現 no definition of functionA error 。現在普遍流行語言都唔洗咁。:fst_016:

如果你係用 header + cpp 的方式, 要改 function , 咁就要 header 及 cpp 都要改哂, 做雙重野, 如果個 ide 設計得唔好, 有排你搞。:fst_008:

[[i] 本帖最後由 煙民母親生賤種 於 2017-11-30 03:13 AM 編輯 [/i]]

ghostkcleung 2017-11-30 08:27 AM

我係業餘寫程式玩,無乜點用 IDE,通常係 NotePad。

依家寫緊 Arduino 玩,先至焗住 C++,而且我好多年前已經係 OOP 嘅信徒,乜都最好物件化設計,如果玩由上至下寫 function,嗰啲 global variable 會好亂。

Susan﹏汪汪 2017-11-30 08:29 AM

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2017-11-30 03:02 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=471665869&ptid=27090482][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
唔用  pointer 根本無可能做到唔 trigger constructor, contructor 的目的就係 instantiate 時自動 run 的 function。C++ 有度衰, 就係用 A a 呢種寫法就等於 create 左個 object, 所以寫程式時比較麻煩, 好難安排得 ... [/quote]
事實上你用Java C#
延遲initialize只不過係先把reference type set做null

同C++用A *a冇分別

ghostkcleung 2017-11-30 08:56 AM

A* a 睇唔慣,
同埋之後要 將 a.x 變成 a->x ,
不過最後我已經接受咗呢樣嘢。

又有樣嘢想問,
class A { } ;

Class A: public B { }
// public 喺度係咩意思?

Susan﹏汪汪 2017-11-30 08:59 AM

[quote]原帖由 [i]ghostkcleung[/i] 於 2017-11-30 08:56 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=471671371&ptid=27090482][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
A* a 睇唔慣,
同埋之後要 將 a.x 變成 a->x ,
不過最後我已經接受咗呢樣嘢。

又有樣嘢想問,
class A { } ;

Class A: public B { }
// public 喺度係咩意思? [/quote]
public inheritance

C++的inheritance係可以public, protected或private

煙民母親生賤種 2017-11-30 03:27 PM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-11-30 08:29 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=471670393&ptid=27090482][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]

事實上你用Java C#
延遲initialize只不過係先把reference type set做null

同C++用A *a冇分別 [/quote]

咁又點?C++做唔到呀!NULL在程式上唔係一個問题。係d人成日拿咩NULLABLE 來嘈。我都唔知嘈乜?可能呢d就叫無病申淫。

Susan﹏汪汪 2017-11-30 03:42 PM

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2017-11-30 03:27 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=471689785&ptid=27090482][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]


咁又點?C++做唔到呀!NULL在程式上唔係一個問题。係d人成日拿咩NULLABLE 來嘈。我都唔知嘈乜?可能呢d就叫無病申淫。 [/quote]
汪汪寫的code冇乜機會彈error

一個理由就夠

ghostkcleung 2017-12-3 05:17 PM

我想做個環形嘅 Iteratable
有 5 個 Object,
A --> B --> C --> D --> E
然後 E 嘅 next 指返去 A。


[size=16px]while ( element = it -> next ( ) ) {[/size]
[size=16px]  // it -> next( ) 永遠都唔會 NULL[/size]
[size=16px]}[/size]

[[i] 本帖最後由 ghostkcleung 於 2017-12-3 05:40 PM 編輯 [/i]]

Susan﹏汪汪 2017-12-3 06:00 PM

[quote]原帖由 [i]ghostkcleung[/i] 於 2017-12-3 05:17 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=471843179&ptid=27090482][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
我想做個環形嘅 Iteratable
有 5 個 Object,
A --> B --> C --> D --> E
然後 E 嘅 next 指返去 A。


while ( element = it -> next ( ) ) {
  // it -> next( ) 永遠都唔會 NULL
} [/quote]
可以while之前加個variable 記住第一個object
while就check係咪loop轉頭去到第一個object

ghostkcleung 2017-12-4 01:34 AM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-12-3 06:00 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=471845404&ptid=27090482][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]

可以while之前加個variable 記住第一個object
while就check係咪loop轉頭去到第一個object [/quote]

咁做嘅話又多個 Global 喇,
我想辦法重新架構過。

再下一個問題(懶得 Google)
未見過咁樣寫法,
唔知咩意思。
struct s {
int element: 12;
} __attribute__ ((__packed__));

[[i] 本帖最後由 ghostkcleung 於 2017-12-4 01:36 AM 編輯 [/i]]

煙民母親生賤種 2017-12-4 01:48 AM

[quote]原帖由 [i]ghostkcleung[/i] 於 2017-12-4 01:34 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=471867796&ptid=27090482][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]


咁做嘅話又多個 Global 喇,
我想辦法重新架構過。

再下一個問題(懶得 Google)
未見過咁樣寫法,
唔知咩意思。
struct s {
int element: 12;
} __attribute__ ((__packed__)); [/quote][b]packed[/b]
使用該屬性可以使得變量或者結構體成員使用最小的對齊方式,即對變量是一字節對齊,對域(field)是bit對齊。
下面的例子中,x成員變量使用了該屬性,則其值將緊放置在a的後面:
struct test{
char a;
int x[2] __attribute__ ((packed));
};
其它可選的屬性值還可以是:cleanup,common,nocommon,deprecated,mode,section,shared,tls_model,transparent_union,unused,vector_size,weak,dllimport,dlexport等,
詳細信息可參考:[url=http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Variable-Attributes.html#Variable-Attributes]http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Variable-Attributes.html#Variable-Attributes[/url]

煙民母親生賤種 2017-12-4 02:12 AM

https://docs.google.com/document/d/1sqUz1UloRKtVn8iJ39tWcjztgclqCj7r0y1zkR9JkbA/edit?usp=sharing

ghostkcleung 2017-12-9 09:54 PM

我有段 struct 同埋有條 byte Array,

例如:
struct stuck {
  unsigned int u0: 12;
  unsigned int u1: 12;
  uint8_t a;
}

uint8_t bytes[]={1, 2, 3, 4};

大家都係 32 個 bit,有無方法可以將 bytes 嘅 bit 直接 copy 落個 struct 度?

Susan﹏汪汪 2017-12-9 10:35 PM

[quote]原帖由 [i]ghostkcleung[/i] 於 2017-12-9 09:54 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472153124&ptid=27090482][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
我有段 struct 同埋有條 byte Array,

例如:
struct stuck {
  unsigned int u0: 12;
  unsigned int u1: 12;
  uint8_t a;
}

uint8_t bytes[]={1, 2, 3, 4};

大家都係 32 個 bit,有 ... [/quote]
個struct唔止32bits

有個比較直接的方法係咁
[code]
unsigned int u0 = *(unsigned int*)bytes;
[/code]
不過要清楚自己做緊乜先

unsigned int不一定係4 bytes
而且仲有endianness 要考慮

ghostkcleung 2017-12-9 10:36 PM

[quote]原帖由 [i]ghostkcleung[/i] 於 2017-12-9 09:54 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=472153124&ptid=27090482][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
我有段 struct 同埋有條 byte Array,

例如:
struct stuck {
  unsigned int u0: 12;
  unsigned int u1: 12;
  uint8_t a;
}

uint8_t bytes[]={1, 2, 3, 4};

大家都係 32 個 bit,有 ... [/quote]


已解,memcpy 可以做到。
頁: [1]
查看完整版本: 一大堆 C++ 問題...