现在的位置: 首页 > 综合 > 正文

C++面向对象程序设计

2013年10月17日 ⁄ 综合 ⁄ 共 4275字 ⁄ 字号 评论关闭

利用VS2008学习谭浩强教授的《C++面向对象程序设计》,记录自己的学习历程。

1 熟悉面向对象思想,编写class,理解成员函数和成员变量的调用

#include "stdafx.h"
#include<iostream>
using namespace std;
class Time
{
public:
 void set_time();
 void show_time();
private:
 int hour;
 int minute;
 int sec;

};

int _tmain(int argc, _TCHAR* argv[])
{
 Time t1;
 t1.set_time();
 t1.show_time();
 return 0;
}

void Time::set_time()
{
 cin>>hour;
 cin>>minute;
 cin>>sec;
}
void Time::show_time()
{
 cout<<hour<<":"<<minute<<":"<<sec<<endl;
}

2  编写一个类,找出整型数组中元素的最大值

#include "stdafx.h"
#include <iostream>
using namespace std;
class Array
{
public:
 void set_array();
 int max_array();
private:
 int array[10];
 int max;
};

void Array::set_array()
{
 for(int i=0;i<10;i++)
 {
  cin>>array[i];
 }
}

int Array::max_array()
{
 max=array[0];
 for(int i=1;i<10;i++)
 {
  if(array[i]>max)
  max=array[i];
 }
 return max;
}
int _tmain(int argc, _TCHAR* argv[])
{
 Array aa;
 int max_array;
 aa.set_array();
 max_array=aa.max_array();
 cout<<"max="<<max_array<<endl;

 return 0;
}

 

3  函数模板实现函数重载

#include "stdafx.h"
#include<iostream>
using namespace std;
template<typename T>
T max(T a,T b,T c)
{
 if(a<b)
  a=b;
 if(a<c)
  a=c;
 return a;
}

int _tmain(int argc, _TCHAR* argv[])
{
 int i,i1=8,i2=98,i3=32;
 double d,d1=39.3,d2=987.244,d3=83.987;
 i=max(i1,i2,i3);
 d=max(d1,d2,d3);
 cout<<"整型最大值max="<<i<<endl;
 cout<<"实型最大值max="<<d<<endl;
 return 0;
}

 

4  有参和无参构造函数的调用

#include<iostream.h>
class point
{
public:
 point(int x,int y)
 {
  cout<<"有参构造函数的调用:"<<endl;
  xPos=x;
  yPos=y;
 }
 point()
 {
  cout<<"无参构造函数的调用:"<<endl;
  xPos=0;
  yPos=0;
 }
 void print()
 {
  cout<<"xPos: "<<xPos<<",yPos: "<<yPos<<endl;
 }
private:
 int xPos;
 int yPos;
};

int main()
{
 point p1(7,19);
 p1.print();
 point p2;
 p2.print();
 return 0;
}

 

5  计算数组中元素的平均值及元素最大值和最小值

#include<iostream.h>
int main()
{
 int array[10];
 cout<<"请输入10个整型数组元素:"<<endl;
 for(int i=0;i<10;i++)
 {
  cin>>array[i];
 }
 int sum=0;
 float aver;
 int max=array[0],min=array[0];
 for(int j=0;j<10;j++)
 {
  sum+=array[j];
  if(array[j]>max)
   max=array[j];
  if(array[j]<min)
   min=array[j];
 }
 aver=sum/10.0;
 cout<<"数组平均值为:"<<aver<<endl;
 cout<<"数组最大值为:"<<max<<endl;
 cout<<"数组最小值为:"<<min<<endl;
 return 0;
}

 

6 字符串get()和getline()函数

#include<iostream.h>
int main()
{
 char name[16];
 char school[50];
 cout<<"请输入你的姓名:"<<endl;
 cin.get(name,16); //get函数读取一串字符
 cin.get();   // 从输入流中提取换行符,否则下面的getline()函数无法正确执行
 cout<<"请输入你所在的学校名:"<<endl;
 cin.getline(school,50);
 cout<<"你的名字是:"<<name<<endl;
 cout<<"你在这所学校:"<<school<<endl;
 return 0;
}

 

7  数组和指针

#include<iostream.h>
int main()
{
 int sz[5];
 for(int i=0;i<5;i++)
  sz[i]=i;
 cout<<"sz: "<<sz<<endl;
 cout<<"&sz[0]: "<<&sz[0]<<endl;
 cout<<"*sz: "<<*sz<<endl;
 cout<<"*(sz+3): "<<*(sz+3)<<endl;
 return 0;
}

 

8 用析构函数实现对象动态内存的释放

#include<iostream.h>
#include<string.h>
class Computer
{
public:
 Computer(const char *sz,float p)
 {
  brand=new char[strlen(sz)+1];
  strcpy(brand,sz);
  price=p;
 }
 ~Computer()
 {
  delete [] brand;
  cout<<"清理现场"<<endl;
 }
 void print()
 {
  cout<<"品牌:"<<brand<<endl;
  cout<<"价格:"<<price<<endl;
 }
private:
 char *brand;
 float price;
};

int main()
{
 Computer com("Dell",5000);
 com.print();
 return 0;
}

 

9 用指针数组处理字符串

#include<iostream.h>
int main()
{
 char *ptr[]={"zero","one","two","three","four","five"};
 int xInputs;
 cout<<"请输入一个0到5(包括0和5的数): "<<endl;
 cin>>xInputs;
 cout<<"英语:"<<*(ptr+xInputs)<<endl;
 return 0;
}

 

10 如果类中含有指针型的数据成员,需要使用动态内存,程序员最好显式地定义自己的复制构造函数,避免可能出现的各种内存错误

#include<iostream.h>
#include<string.h>
class computer
{
private:
 char *brand;
 float price;
public:
 computer(const char *sz,float p)
 {
  brand=new char[strlen(sz)+1];
  strcpy(brand,sz);
  price=p;
 }
 computer(const computer& cp)  //自定义复制构造函数
 {
  brand=new char[strlen(cp.brand)+1];
  strcpy(brand,cp.brand);
  price=cp.price;
 }
 ~computer()
 {
  delete[] brand;
  cout<<"清理现场"<<endl;
 }
 void print()
 {
  cout<<"品牌:"<<brand<<endl;
  cout<<"价格:"<<price<<endl;
 }
};

int main()
{
 computer comp1("Dell",6000);
 comp1.print();
 computer comp2(comp1);
 comp2.print();
 return 0;
}

 

11 类对象成员

类数据成员也可以是另一个类的对象

#include<iostream.h>
class point
{
public:
 int xpos;
 int ypos;
public:
 point(int x=0,int y=0)
 {
  cout<<"点的构造函数被执行"<<endl;
  xpos=x;
  ypos=y;
 }
 point(const point& pt)
 {
  cout<<"点的复制构造函数被执行"<<endl;
  xpos=pt.xpos;
  ypos=pt.ypos;
 }
 void print()
 {
  cout<<"( "<<xpos<<", "<<ypos<<")";
 }
};
class line
{
private:
 point pt1;
 point pt2;
public:
 line(int x1,int y1,int x2,int y2):pt1(x1,y1),pt2(x2,y2)
 {
  cout<<"线的构造函数被执行"<<endl;
 }
 line(const line& l1):pt1(l1.pt1),pt2(l1.pt2)
 {
  cout<<"线的复制构造函数被执行"<<endl;
 }
 void draw()
 {
  pt1.print();
  cout<<" to ";
  pt2.print();
  cout<<endl;
 }
};

int main()
{
 line l1(1,2,3,4);
 l1.draw();
 line l2(l1);
 l2.draw();
 return 0;
}

抱歉!评论已关闭.