//有一個使用cout<<GetName()的函數,每次執行結果都是只輸出了傳入字元串的首地址,即第一個字元,想了很久沒有找到辦法,後來將函數類型改為指針函數,結果就對了,仍然不是很明白為什麼可以這樣輸出,隱隱覺得函數的返回值仍然是一個地址,也許是cout函數的作用把後面的字元也輸出了,先記下來,之 ...
//有一個使用cout<<GetName()的函數,每次執行結果都是只輸出了傳入字元串的首地址,即第一個字元,想了很久沒有找到辦法,後來將函數類型改為指針函數,結果就對了,仍然不是很明白為什麼可以這樣輸出,隱隱覺得函數的返回值仍然是一個地址,也許是cout函數的作用把後面的字元也輸出了,先記下來,之後再慢慢找原因
//return類型為指針的函數,用cout輸出,返回的是整個字元串
#include<iostream>
#include<cstring>
using namespace std;
class Person {
public:
char name[40];
char tel[15];
char *GetName(){return name;};
char *GetTel(){return tel;};//定義指針型函數,輸出才是整個字元串,非常重要!!! ,形參是地址,所以實參傳入的也是地址
Person(char *Name,char*Tel){strcpy(name,Name);strcpy(tel,Tel);};//
};
class Student
{
private:
char major[18];
public:
Student(char*Major){strcpy(major,Major);};
char *GetMajor(){return major;};
};
class Teacher
{
private:
char course[15];
public:
Teacher(char*Course){strcpy(course,Course);}
char *GetCourse(){return course;};
};
//派生類:繼承Person和Student,Teacher類
class StudentTeacher:public Person,public Student, public Teacher
{
public:
StudentTeacher(char*name,char*tel,char*major,char*course):Person(name,tel),Student(major),Teacher(course) //基類的初始化,使用初始化列表一次按照繼承順序給基類初始化
{};
};
int main()
{
char name[40], tel[15], major[18], course[15];// 分別代表名字、電話、專業、課程
cin >> name >> tel >> major >> course;
StudentTeacher st(name, tel, major, course);
cout << st.GetName() << endl;
cout << st.GetTel() << endl;
cout << st.GetMajor() << endl;
cout << st.GetCourse() << endl;
cin >> name >> tel; //修改名字和電話
strcpy(st.name, name);
strcpy(st.tel, tel);
cout << st.GetName() << endl;
cout << st.GetTel() << endl;
cout << st.GetMajor() << endl;
cout << st.GetCourse() << endl;
return 0;
}