自己在学习的过程中C++,VB等语言时不断的找教程,林林总总表现方式的教程都看过了.也很感谢那些有心之人写下好那么好的教程好那些收集整理教程的人们.本人也想为编程的爱好者做些事情.用另一种表现方式去表现别人已经写好的教程(当然会有小改动)
今天本人在学习的过程中,在程序代码里写注释时想到.为什么我们不把教程写到程序里面呢.把它给注释掉,就像下面这样的表现方式.然后我们给学习者源码就行了.学习都打开源码就可以直接运行程序.
我改写的这个教程是来自<<C++程序设计语言>>即<<The C++ Programming Language>>
Bjarne Stroustrup
(美)------------------著
贝 尔 实 验 室
#include <iostream>
#include <string>
#include <stdlib>
using namespace std;
//10.2.2 访问控制
//在前一节里的Date声明提供了一组操作Date的函数,然而,它却没有清楚地说明这些函数就是直接依赖于
//Date的表示的全部函数,而且也是仅有的直接访问Date类的对象的函数.这引起限制可以通过用class
// 代替struct而描述清楚:
class Date{
int d,m,y;
public:
void init(int dd,int mm,int yy){ //初始化
cout<<"初始化日期为:"
<<dd<<"日"<<mm<<"月"<<yy<<"年"<<endl;
};
void add_year(int n){cout<<"加"<<n<<"年"<<endl;}; //加n年
void add_month(int n){cout<<"加"<<n<<"月"<<endl;}; //加n月
void add_day(int n){cout<<"加"<<n<<"日"<<endl;}; //加n天
void del_day(int n); //删除一天
};
//标号public将这个类的体分为两个部分,其中的每一部分(私用部分)只能由成员函数使用;而第二部分
//(公用部分)则构成了该类的对象的公用界面.一个struct也是一个class,但是其成员的默认方式是公用
//成员函数的定义和使用与以前完全一样.例如:
inline void Date::del_day(int n){
cout<<"删除"<<n<<"日"<<endl;
}
//然而,非成员函数将禁止访问私用成员,例如,
//void timewarp(Date& d){
// d.y-=200; //错误:Date::y为私用成员
// }
//将对数据结构的访问严格限制到明确说明的一组函数,这样做有许多优点.例如,导致Date保存某个非法值
//(例如,1985年12月36日)的任何错误必然是由某个成员函数的代码造成的.这就意味着第一个层次的排错
//--局部化--在程序运行之前就已经完成了.这也是一种一般认识的特殊情况,该认识是:类型Date行为的任何
//改变都能够且必须是受到其成员函数改变的影响.特别是,如果一个类的表示方式改变了,我们只要修改成员
//函数,就可以去使用这个种新表示.用户代码只直接依赖于公用界面,因此就不需要重新写(虽然可能需要重新
//编译).另一个优点是,一个潜在的用户要学习使用一个类,也只需要考察其成员函数的定义.
// 对私用成员的保护依靠的是对于使用类成员名字的限制.可以通过地址操作和显式的类型转换绕过这些
//限制.不过,这些方式当然是作敝行为.C++的保护只是为了避免无意的失误,而不是为了防止精心策划的计谋
//(骗局).只有硬件才可能防止对通用语言的来意使用.当然,即使是利用了硬件,想在现实的系统里把这件事情
//做好也非常困难.
// 这里加入进一个init()函数,部分原因是,有一个函数来设置对象的值一般总是有用的;还有就是数据的私
//用性也迫使我们去提供它.
int main(int argc, char* argv[])
{
Date meDate;
meDate.init(20,05,1999);
meDate.add_year(1);
meDate.add_month(1);
meDate.add_day(1);
meDate.del_day(3);
system("pause");
return 0;
}
//---------------------------------------------------------------------------