第一題(好像是錯最後一行)
void main()
{
int a[5]={1,2,3,4,5};
int * const p=a;
const int *q=a;
const int * const x=a;
p++; *q=2; x[3] = 4;
}
第二題(好像是錯 倒數第4行&倒數第8行)
B. #include <iostream>
using namespace std;
class base
{
public:
int x;
virtual void Func1() = 0;
private:
int y;
};
class derived : public base
{
public:
virtual void Func1() {x = y = 10;}
};
void main()
{
base obj1;
derived obj2;
cout << obj1.x << " " << obj2.x;
}
第三題(我不太確定答案..)
class Time
{
public:
Time(){hout=0;minute=0;second=0;this->count++;}
~Time(){this->count--;}
static void settime(int h,int m,int s){hour=h;minute=m;second=s;}
private:
int hour;
int minute;
int second;
static int count;
const int increment=1;
};
int Time::count=0;
第四題(我還是不知道答案 抱歉...)
class Example
{
public:
Example(int y=10):data(y){}
~Example(int y=5){}
int getIncrementData()const {return data++;}
static int getCount(){
cout<<"Data is"<<data<<endl;
return count;
}
private:
int data;
static int count;
}
希望大家能救救我
非常感謝!!非常非常感謝
簡單回答一下看到的幾個錯誤:
第一題:
void main()
{
int a[5]={1,2,3,4,5};
int * const p=a;
const int *q=a;
const int * const x=a;
p++; *q=2; x[3] = 4;
}
錯在第一行void main()
與
最後一行p++; *q=2; x[3] = 4;
因為main必須回傳int形態,應改為int main()
。
最後一行錯是因為在變數宣告上用了const
這個關鍵字,
所以之後不能再修改變數的值。
第二題:
#include <iostream>
using namespace std;
class base
{
public:
int x;
virtual void Func1() = 0;
private:
int y;
};
class derived : public base
{
public:
virtual void Func1() {x = y = 10;}
};
void main()
{
base obj1;
derived obj2;
cout << obj1.x << " " << obj2.x;
}
錯在virtual void Func1() {x = y = 10;}
這行,
因為在class base中,y
是private屬性,
即使是繼承的class也不能直接修改y
的值
下面一樣要改int main()
。
在main()中,因為base裡有virtual
函數,
不能直接宣告base obj1;
第三題:
class Time
{
public:
Time(){hout=0;minute=0;second=0;this->count++;}
~Time(){this->count--;}
static void settime(int h,int m,int s){hour=h;minute=m;second=s;}
private:
int hour;
int minute;
int second;
static int count;
const int increment=1;
};
int Time::count=0;
首先是Time(){hout=0;minute=0;second=0;this->count++;}
拼字錯誤: 是hour
不是hout
。
再來是static void settime(int h,int m,int s){hour=h;minute=m;second=s;}
有錯,靜態函數不能初始化。
第四題:
class Example
{
public:
Example(int y=10):data(y){}
~Example(int y=5){}
int getIncrementData()const {return data++;}
static int getCount(){
cout<<"Data is"<<data<<endl;
return count;
}
private:
int data;
static int count;
}
錯在~Example(int y=5){}
,int getIncrementData()const {return data++;}
,static int getCount()
這幾行。
~Example(){}
,destructor 不能有參數。int getIncrementData()const {return data+1;}
,因為函數宣告成const,不能去修改data
的值,用data++
會修改到。最後是在class的大括號後面要加分號,以完成class的定義。
2019/7/27晚間8:00更正:
抱歉先前回答的觀念有些不盡正確,
這邊更正一下。
void main()
應該不算錯誤static
靜態函數錯誤的原因這邊做個修正,static
形態的變數,static
函數給不是static
的變數hour
賦值會錯。static
函數中去做了cout<<"Data is"<<data<<endl;
這行,存取到不是static
的變數data
,故會報錯。參考資料: http://kamory0931.pixnet.net/blog/post/119201381-c%2B%2B的static
main回傳int要看編譯器,
我習慣的編譯器是可以用void main的,
所以也不算錯...
最後一題的3原因是「靜態函數不能初始化」,我不知道這個函數哪裡做初始話了...
還有非常感謝你的詳細解說,終於解惑了
class Time{
public:
Time(){increment=1;}
private:
int hour=0;
int minute=0;
int second=0;
const int increment;
}
這個錯誤是因為increment宣告成const,所以不可以直接修改嗎?
好的,謝謝小魚大大的指正,因小馬的編譯器需要寫int main()
才能夠編譯成功,一時不查,感謝糾正觀念~
sunnyyeh您好,關於static靜態函數錯誤的原因上述解說不盡正確。
已於解答中更正了你看一下。
另外回答您的問題:
對,const變數宣告後不能直接修改。
喔喔喔看懂了,非常感謝你們的幫忙QAQ
能幫我看另外兩題嗎(如果第二題太麻煩,就不用了)拜託?非常感謝你們
喔喔喔看懂了,非常感謝你們的幫忙QAQ
能幫我看另外兩題嗎(如果第二題太麻煩,就不用了)拜託?非常感謝你們