C++面向对象程序设计

来源:互联网 发布:淘宝网培训学校 编辑:程序博客网 时间:2024/06/05 21:09

利用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;
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 才出生的兔宝宝被母兔抓伤了怎么办 老婆生气了说恨我一辈子我该怎么办 华为手机微信表情不显示含义怎么办 地下城游戏登录链接一直失败怎么办 聊天时别人打听家人不想回答怎么办 微信钱包零钱密码忘了怎么办 斗图我能怎么办我也很无奈 微信解冻设备不一致申诉失败怎么办 看不懂微信脸部表情什么意思怎么办 有的动图图片过大微信发不了怎么办 微信漂流瓶扔瓶子没有人回复怎么办 删了微信 手贱 添加 怎么办 姨妈弄到床垫上拆不下来洗怎么办 碰到情商智商都高的小人怎么办 微信聊天界面右上角的小人头怎么办 最近摸高摸到的高度越来越矮怎么办 每次孕检显示小孩子体型大怎么办? 阴阳师纸片人蓝色锦囊点掉了怎么办 抱孩子把腰闪了动不了在家怎么办 餐厅客人中有儿童服务时怎么办 脊柱胸段向右侧凸要怎么办 玩球球大作战不小心开自由了怎么办 小孩哭脸后喝水呛着了怎么办 摔跤引起的脸部半边儿僵硬怎么办 老人受了刺激大笑不止是怎么办 想让父母陪着玩 没时间怎么办 开过光的百家锁东西别人碰了怎么办 兔兔助手描述文件变了存档怎么办 扣扣没有绑手机被盗了怎么办 我的扣扣被盗了好友也被删了怎么办 小孩不胖但脖子黑怎么办呢 小孩喜欢歪头斜眼看东西怎么办 苹果x屏幕截图发送后成文字怎么办 小朋友照相照出老太脸是怎么办 照相把脸照的很长怎么办 小猫咪下半身不能动不吃不喝怎么办 画个火柴人2主页面进不了怎么办? 火柴人联盟2的衣厨怎么办 偶尔犯了一次错误很自责怎么办 房间已经装修好但想加线条怎么办 自己的房间特别乱却不想收拾怎么办