[問題] 計程考古題

看板NTUEE110HW作者 (吐司)時間19年前 (2007/01/17 01:56), 編輯推噓9(903)
留言12則, 4人參與, 最新討論串1/1
問題1. strlen和strcpy為什麼不用#include<string>也可以用啊?? 問題2. #include<iostream> #include<cstring> using std::cout; class String { public: String(const char *str) { int length = strlen(str); buffer = new char[length + 1]; strcpy(buffer, str); } operator const char*() { return buffer; } private: int length; char *buffer; }; int main() { String s("Good Luck!"); cout << (const char*)s; return 0; } 上面紅色那是什麼? 感覺他創造了新的operator?? 而且還可以過 跑的很順 看了真火大 好啦火大不是重點 到底是為什麼哪個高手可以解說依下orz 問題3. #include<iostream> #include<string> //沒有也可以耶!! using std::cout; class String { public: String(char *s) { length = strlen(s); buffer = new char[length + 1]; strcpy(buffer, s); } char operator[](int index) {return buffer[index];} private: int length; char *buffer; }; int main() { String s("Good day!"); s[2] = 's'; //non-lvalue in assignment return 0; } 那行黃色的不會過原因已經寫了 可是應該要怎麼改呢(使s[2]變成's') -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.240.124 ※ 編輯: jackwei 來自: 140.112.240.124 (01/17 02:01)

01/17 02:02, , 1F
strlen好像是c的funtion 所以不用include like printf
01/17 02:02, 1F
※ 編輯: jackwei 來自: 140.112.240.124 (01/17 02:05)

01/17 02:06, , 2F
第三個的問題在於[]只能用再傳值回來 沒修改的功能
01/17 02:06, 2F

01/17 02:12, , 3F
那要怎麼改呢
01/17 02:12, 3F

01/17 02:13, , 4F
第二個是順序的問題 等同於const char* operator()
01/17 02:13, 4F

01/17 02:13, , 5F
cout << (const char*)s 這行根本是騙人的
01/17 02:13, 5F

01/17 02:14, , 6F
iostream有包到string.h
01/17 02:14, 6F

01/17 02:16, , 7F
這行比較像轉型 像 (int) 'a' 會取得ascii code一樣
01/17 02:16, 7F

01/17 02:18, , 8F
operator const char*() 這是代表將string轉為*char
01/17 02:18, 8F

01/17 02:20, , 9F
以上為本人的小小看法 本人為遜腳
01/17 02:20, 9F

01/17 02:32, , 10F
第三提想出來了
01/17 02:32, 10F

01/17 02:32, , 11F
把char operator[]加個& 就變成lvalue了
01/17 02:32, 11F

01/17 10:41, , 12F
#include<string.h> or #include<cstring> 沒include不能用
01/17 10:41, 12F
文章代碼(AID): #15hH6qQ7 (NTUEE110HW)