第2周專案-課後實踐·閱讀程式(1)
/*
* Copyright (c) 2015, 煙臺大學計算機學院
* All rights reserved.
* 檔名稱:test.cpp
* 作 者:劉暢
* 完成日期:2015年 3 月 11 日
* 版 本 號:v1.0
*
* 問題描述:閱讀第一個物件導向的程式,程式結構是所有成員函式都在類內定義,閱讀程式,回答相關問題;
* 輸入描述: NULL;
* 程式輸出: NULL。
程式碼如下:
#include <iostream>
#include <cstring>
using namespace std;
class Student
{
private:
int num;
char name[20];
char sex;
public:
void set_data(int n,char *p,char s)
{
num=n;
strcpy(name,p);
sex=s;
}
void display()
{
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
}
};
int main()
{
Student stud1,stud2;
stud1.set_data(1,"He",'f');
stud2.set_data(2,"She",'m');
stud1.display();
stud2.display();
return 0;
}
問題如下:
l 程式中定義的類名是Student。
l 在main函式中,定義的stud1和stud2稱為物件;
l 該類中,num、name、sex稱為類的資料成員,其訪問許可權為private(私有的),意味著只有本類中的成員函式才能引用它們,類外不能呼叫。
l 該類中,set_data和display稱為類的成員函式,其訪問許可權為public(公開的),意味著外界可以呼叫它們。
l 在main函式中26行後,呼叫stud1.display();將會出現什麼結果?請解釋結果。
l 執行視窗會輸出三個隨機數或字元,原因是由於尚未對stud1中的num,name,sex賦值,計算機自動輸出了三個隨機資料。
l 請刪除上面加的一行程式碼,在main()函式的28行後,呼叫stud2.sex=’f’,記錄提示的錯誤?為什麼會這樣?
l 9:10: error: 'char Student::sex' is private
l 29:11: error: within this context
l 原因是sex是私有的資料,不能被外界直接引用。
l 。
l 將第9行char sex;移到第10行後,即將sex成員宣告為公共資料成員,再次編譯程式。請解釋不會出錯的原因,並對這種做法進行評價。
l 移動sex後sex變成了公用的資料。可以在main()函式中被訪問,上一個問題的sex不能被訪問的問題被解決,雖然stud2.sex=’f’但在下一步stud2.set_data(2,"She",'m')中stud2.sex又被再次賦值為’m’。對於這樣的寫法,我的看法是不好,sex變成公用的資料後外界能夠直接引用修改它,相當於把物件的屬性變成了行為,程式容易產生問題。
l 將第6行private:去掉,結果是否發生變化,請解釋原因。
l 不會,因為class類的定義中既不指定private,也不指定public,則系統就預設為是私有的。
l 將第10行public:去掉,記錄出現的情況,並解釋原因。
l 11:10: error: 'void Student::set_data(int, char*, char)' is private
l 27:30: error: within this context
l 27:30: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
l 11:10: error: 'void Student::set_data(int, char*, char)' is private
l 28:31: error: within this context
l 28:31: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
l 17:10: error: 'void Student::display()' is private
l 29:19: error: within this context
l 17:10: error: 'void Student::display()' is private
l 30:19: error: within this context
l 去掉public後set_data和display兩個公用的成員函式變成了私有的成員函式,main函式中將不能再直接訪問它們,所以出錯了。
有些問題上可能回答的不是很準確,請見諒也請指點下,留下正確答案,讓我從中學習,改掉錯誤的概念。
相關文章
- 第2周專案-課後實踐·閱讀程式(2)
- 第4周課後實踐·閱讀程式-建構函式與解構函式(1)函式
- 第4周課後實踐·閱讀程式-建構函式和解構函式(2)函式
- 第4周課後實踐·閱讀程式-建構函式和解構函式(3)函式
- 第4周課後實踐·閱讀程式-建構函式和解構函式(4)函式
- 第3周課後實踐·程式閱讀(4)-利用引用訪問私有資料成員
- 第3周課後實踐·閱讀程式(2)-利用指標訪問私有資料成員指標
- 第3周課後實踐·閱讀程式(3)-利用函式訪問私有資料成員函式
- 主題閱讀-專案實踐感悟
- 第14周-閱讀專案1-二進位制檔案的讀寫
- Web最佳實踐閱讀總結(1)Web
- 實踐JavaWeb課程專案JavaWeb
- 第15周-閱讀專案1-異常處理&&名稱空間
- 第14周-閱讀專案5-字串流物件字串物件
- 《GitHub 入門與實踐》閱讀筆記(第4章)Github筆記
- 第13周-閱讀專案1-標準輸入輸出物件及文字檔案物件
- 《軟體工程》第2次作業(1、個人專案實踐)軟體工程
- 知乎專案程式碼閱後總結
- 第13周-閱讀專案4-寫出下面程式的輸出結果
- 第13周-閱讀專案3-對文字檔案的訪問
- 第 36 期 k8s context 實踐原始碼閱讀K8SContext原始碼
- 教你閱讀 Python 開源專案程式碼Python
- 知行社的前端早讀課 第1期前端
- 專案管理基礎與實踐(1)專案管理
- 課程實踐(一)續1
- 專案管理知識體系指南(PMBOOK指南)(第5版) 閱讀摘要專案管理
- 前後端分離專案實踐分析後端
- Web最佳實踐閱讀總結(2)Web
- 專案實踐-進度遊戲(1): Schedule Chicken遊戲
- 配置Source Insight閱讀PHP專案的程式碼PHP
- 第13周-閱讀專案2-有關引數的get函式函式
- 第15周-閱讀專案2-異常處理&&名稱空間
- git幫助閱讀開源專案Git
- 如何閱讀java專案的原始碼Java原始碼
- Python程式碼閱讀(第36篇):列表偏移Python
- 閱讀和實踐是最好的老師
- 閱讀《現代軟體工程構建之法》第6第7章後感想軟體工程
- 自學筆記-16001-程式碼閱讀方法與實踐筆記