iT邦幫忙

0

C++ 程式碼錯誤

想問版上大大關於C++的問題
這其實是紙筆考試 要考哪裡錯誤
希望大家可以教教我...ˊˋ
給我錯誤的解釋 非常謝謝QAQ

第一題(好像是錯最後一行)

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;

}

希望大家能救救我
非常感謝!!非常非常感謝

看更多先前的討論...收起先前的討論...
您好,好奇問一下這是學校考題還是公司面試考題呢?
dragonH iT邦大師 1 級 ‧ 2019-07-27 13:18:25 檢舉
我建議你可以補上你的這些題目的初步解析

不然作業題在這是很敏感的(應該是說任何類似討論區都是
sunnyyeh iT邦新手 5 級 ‧ 2019-07-28 21:15:16 檢舉
學校考題喔 oop期中考@@
sunnyyeh iT邦新手 5 級 ‧ 2019-07-28 21:16:23 檢舉
喔喔喔好的 我以後會改善 不好意思ˊˋ

1 個回答

0
心原一馬
iT邦新手 4 級 ‧ 2019-07-27 13:48:21
最佳解答

簡單回答一下看到的幾個錯誤:
第一題:

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()這幾行。

  1. 改為~Example(){} ,destructor 不能有參數。
  2. 改為int getIncrementData()const {return data+1;},因為函數宣告成const,不能去修改data的值,用data++會修改到。
  3. 一樣,靜態函數不能初始化。

最後是在class的大括號後面要加分號,以完成class的定義。

2019/7/27晚間8:00更正:
抱歉先前回答的觀念有些不盡正確,
這邊更正一下。

  1. void main()應該不算錯誤
  2. 關於static靜態函數錯誤的原因這邊做個修正,
    應該是靜態函數只能存取同樣是static形態的變數,
    因此第三題用static函數給不是static的變數hour賦值會錯。
    第四題在static函數中去做了cout<<"Data is"<<data<<endl;這行,存取到不是static的變數data,故會報錯。

參考資料: http://kamory0931.pixnet.net/blog/post/119201381-c%2B%2B的static

看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2019-07-27 15:34:37 檢舉

main回傳int要看編譯器,
我習慣的編譯器是可以用void main的,
所以也不算錯...

sunnyyeh iT邦新手 5 級 ‧ 2019-07-27 16:31:06 檢舉

最後一題的3原因是「靜態函數不能初始化」,我不知道這個函數哪裡做初始話了...
還有非常感謝你的詳細解說,終於解惑了

sunnyyeh iT邦新手 5 級 ‧ 2019-07-27 16:33:26 檢舉
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變數宣告後不能直接修改。

sunnyyeh iT邦新手 5 級 ‧ 2019-07-28 11:40:31 檢舉

喔喔喔看懂了,非常感謝你們的幫忙QAQ
能幫我看另外兩題嗎(如果第二題太麻煩,就不用了)拜託?非常感謝你們

sunnyyeh iT邦新手 5 級 ‧ 2019-07-28 11:40:32 檢舉

喔喔喔看懂了,非常感謝你們的幫忙QAQ
能幫我看另外兩題嗎(如果第二題太麻煩,就不用了)拜託?非常感謝你們

我要發表回答

立即登入回答