【发布时间】:2010-01-02 09:53:34
【问题描述】:
我在高中、计算机培训机构等教授 C++ 大约 2 年。在教授有关变量、数组、结构、函数的基础知识后,我总是从传统示例开始面向对象示例部分,例如:
class Person {
public:
Person();
~Person();
char* getFirstName(); //we can use std::string instead of char* in optimization part
char* getLastName();
char* getFullName();
int getAge();
bool getGender();
void printFullProfile();
void setFirstName(char*);
void setLastName(char*);
void setAge(unsigned int);
void setGender(bool);
void setGender(char);//f for female, m for male.
private:
char* first_name; //or std::string but i prefer to use pointers in the beginning.
char* last_name;
unsigned int age;
bool gender; //ladies 1(st) , male 0
}
然后完成这个 Person 类并教授新知识,例如为什么 getter 和 setter 方法是邪恶,并通过创建其他类(如 Student、员工、版主等),必要的 OOP 技能和概念。
[编辑]: 并使这些类对解决编程问题有用。 (比如计算每个 Employee 对象的薪水,学生平均成绩等等)
另一个基本示例是 Vehicle 类、Shape 类等。
我想知道您对如何(只需)开设 OOP 课堂的想法。
期待伟大的想法。
【问题讨论】:
-
对您的示例的一些建议:1. 我几乎从不鼓励在使用 C++ 时使用 char* -- 而是使用 std::string, 2. 不需要每个设置器函数类的成员(这对教授封装的含义很重要)
-
恕我直言,C++ 是教授 OOP 原理的糟糕选择,因为它的许多基本功能都不是真正的 OO - 例如模板。话虽如此,我不认为完美的面向对象教学语言存在:-(
-
小提示。不要使用缩写的字段和函数名称。通过键入“fname”而不是“firstName”来完成什么? “firstName”一目了然,不会让新手想知道为什么到处都是有趣的缩写。
-
我真的不喜欢用布尔值来表示性别。即使男人有“额外的一点”。