当前位置:编程学习 > C/C++ >>

C++程序 求解释

#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
.......
程序具体在
http://hi.zhaoxi.net/something3/blog/item/3a3fa54599fec926cefca330.html
解释发给我
MDLFREE@126.COM




如上能否解释一下
从头文件 到最后
我只看得懂C C++不懂希望能有人解释一下这个程序
答案:
#include<iostream>
#include<string>
using namespace std;
/*这是一个父类*/
class Shape
{
protected:
int aDataInParent;/*保护的权限 子类可以访问,外部可以访问*/
public:
/*如果什么都不写的,系统会提供一个默认的无参构造函数*/
Shape()/*构造函数,在生成一个对象的实体时调用,用来为其分配内存空间,初始化变量等工作*/
{
cout<<"调用父类(形状类)构造函数"<<endl;
}
/*重载就是函数名字相同 而参数不一样,下面这个就是对上面无参构造函数的重载,
调用时,系统会根据输入实际参数,来选择与之匹配的函数*/
Shape(int value)/*这个只是用来演示重载的*/
{
this->aDataInParent=value;
}
/*其实析构函数用的很少的,系统会提供一个默认的析构函数*/
~Shape()/*作用与构造函数正好相反,用来在对象生命周期结束后,释放内存空间的,执行顺序与构造函数正好相反*/
{
cout<<"调用父类(形状类)析构函数"<<endl;
}
void FunctionInParent()/*为了简单函数体什么都没写,自己可以添加一些输出信息*/
{}
};
/*Circle 类继承自 Shape
反过来也可以说,Shape 派生出来了子类 Circle
由于继承的关系,子类自动获得父类的成员函数,和变量*/
class Circle:public Shape
{
public:
Circle()/*调用构造函数时,总是先调用父类的,再调用子类的*/
{
cout<<"调用子类(圆类)构造函数"<<endl;
this->aDataInParent;/*只是为了演示子类可以使用父类的变量,没有实际意义*/
this->FunctionInParent();/*只是为了演示子类可以调用父类的函数,没有实际意义*/
}
~Circle()/*调用构造函数时,与构造函数相反,总是先调用子类的,再调用父类的*/
{
cout<<"调用子类(圆类)析构函数"<<endl;
}
};
class Rectangle:public Shape
{
public:
Rectangle()
{
cout<<"调用子类(方类)构造函数"<<endl;
this->aDataInParent;/*只是为了演示子类可以使用父类的变量,没有实际意义*/
this->FunctionInParent();/*只是为了演示子类可以调用父类的函数,没有实际意义*/
}
~Rectangle()
{
cout<<"调用子类(方类)析构函数"<<endl;
}
};
int main()
{
/*注意各个输出语句的顺序,观察各个函数调用的顺序*/
cout<<"下面输出的时调用父类构造函数的语句"<<endl;
Shape aShape;
cout<<string(20,'-')<<endl;//输出一条分割线
cout<<"下面输出的时调用圆类构造函数的语句"<<endl;
Circle aCircle;
cout<<string(20,'-')<<endl;
cout<<"下面输出的时调用方类构造函数的语句"<<endl;
Rectangle aRectangle;
cout<<string(20,'-')<<endl;
cout<<"下面的就是调用各自的析构函数了\n在程序执行完将要退出时执行(其实是在一个对象的生命周期结束后执行)\n"<<endl;
cout<<string(20,'-')<<endl;
/*当然析构函数也可以自己调用
aShape.~Shape();
aCircle.~Circle();
aRectangle.~Rectangle();*/
return 0;
}
给你的写的一个程序,楼主好好看看C 书吧,这些都是书上的基本知识,不是一两个程序就能讲清楚的
//既然你已经有了c的基础,那么我就只,将c++增出的特性写出
#include <string.h>这是字符串,就类似c的char*
#include <fstream.h>存读文件时用的
#include <iostrea.h>这是输入输出,类似c的<stdio>,但他的输入是cin>>,输出是cout<<

class student{};这是一个类,面向对象程序所必须的,它是将数据与函数进行封装,然后用一个对象进

行调用,最大的好处是重用性.

例: student stu//stu为对象
//它里面比较简单,只有两个构造函数,但它友元,就是friend的作用没有显示出来,可有可无
//具体的对象是什么我一句两句也说不清楚,怎么用,你最好找个简单的书看一下
stu.Dosomething();调成员函数

这个main函数缺陷是主体太大,导致查看时不方便
主体这样
void main()
{
cout...
cout...//十多条提示就类似printf
}

//第一个判断用户输出的是否和法的
do
{}while

do
{
switch()

case '0'

case '1'
....

do{

}while()//这个do也是判断用户输出是否合法

}while()

整个函数的主体就是这样,代码最多的也就是case当中,我就将case语句当中一些c没有的特性讲出来

ofstream *file[50]//这是一个输出流,向文件输出的
file[j]=new ofstream("d:\\document",ios::ate);
这是文件路径,ios::ate是追回的意思,new是分配动态内存,管理堆,类似c的malloc()

他进行了动态分配内存,没有释放掉分配出去的,造成了内存泄露……应该delete…分配的内存

这个代码我尝试了一下,编译没问题,但是这么长的程序,总不能一句句的讲吧,你列出来你不懂的地方,这样还好说一些...

上一个:简单的C++问题
下一个:C++的有关问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,