本教程适用于有C语言基础。
1. 1 C++是一门面向对象的语言,所以首先要知道一些面向对象的基本概念。
对象:对象是紧密联系在一起的一组变量和函数,或者说,对象包含了一组数据成员和一些成员函数。
类:类是具有相同属性和行为的一组对象实例的集合,他为属于该类的对象实例提供了统一的抽象描述,包含属性和行为。
封装:所谓封装就是把某个事物包装起来,使外界不知道事物内部的具体内容。也就是说在使用一个对象的时候,只需要知道他向外接提供的接口形式而无需知道它的数据结构细节和实现行为操作的具体算法。
继承:就是子类通过继承获取父类的一些属性和行为。
多态:多态性是指在继承系中,子类对象可以像父类那样使用。同样的消息既可以发送给父类对象也可以发送给子类对象。在类等级的不同层次中,相同的消息,被不同类(属同一簇)的对象接收,会发生不同的行为。
例程:
// chapter1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
//#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
printf("Hello World");
// std::cout << "Hello, World!" << std::endl;
return 0;
}
2.1C++的标准库定义在一个成为std的名字空间里。C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50多个标准头文件中定义,其中18个提供了C运行库的功能。例如,对于I/O流库,如果使用VC++6.0,那么应该包含:
#include<iostream>
但是在VS2010下,应采用如下方式包含头文件:
#include<iostream>
using namespace std;
后面这种方式是C++标准推荐的。
2.2C++的简单输入与输出
cin与运算符>>一起可完成标准输入,cout与<<一起用于标准输出。
例程:
// chapter2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char Name[10];
int Age;
cin>>Name;
cout<<Name<<endl;
cin>>Age;
cout<<Age<<endl;
cout<<"Hello World"<<endl;
cout<<23<<endl;
cout<<28.9<<endl;
cout<<"名字"<<Name<<"年龄"<<Age<<endl;
return 0;
}
2.3数组与指针
指针与数组没有本质区别,在处理很多相同类型的数据时,我们自然会想到数组,比如下面的语句:
int x[1000];
利用指针完成上述操作:
int *x;
x = new int[1000];
if(x==NULL){
cout<<"申请内存失败"<<endl;
exit(0);
}
2.4函数
引用类型和const变量
int x=10;
int & y = x;
上面的代码说明定义了一个整形引用变量y,他是变量x的别名,y并不需要占用额外的存储空间,它与x使用相同的存储空x间,因此x变化时,也同时意味着y的变化,反过来也一样。
const int x=10;
这里定义了一个整形const变量x。x以后永远等于10,不允许再改变x的值,否则编译器会产生一个错误。
函数原型与函数实现
MyFile.h文件:
#ifndef __MYFILE_H__
#define __MYFILE_H__
void DiskCopy();
void DiskFormat();
void DiskAnalysis();
void DiskBack();
#endif
MyFile.cpp文件:
// chapter2_3_2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
#include "MyFile.h"
int _tmain(int argc, _TCHAR* argv[])
{
int choice;
do
{
system("cls");
cout<<"********请选择1,2,3,4,或5*************"<<endl;
cout<<"1:磁盘拷贝"<<endl;
cout<<"2:磁盘格式化"<<endl;
cout<<"3:磁盘分析"<<endl;
cout<<"4:磁盘备份"<<endl;
cout<<"5:退出"<<endl;
cin>>choice;
}while(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5);
choice = choice-1;
if(choice==4)
return 0;
void (*OperDisk[])()={DiskCopy,DiskFormat,DiskAnalysis,DiskBack};
OperDisk[choice]();
return 0;
}
主文件:
// chapter2_3_2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
#include "MyFile.h"
int _tmain(int argc, _TCHAR* argv[])
{
int choice;
do
{
system("cls");
cout<<"********请选择1,2,3,4,或5*************"<<endl;
cout<<"1:磁盘拷贝"<<endl;
cout<<"2:磁盘格式化"<<endl;
cout<<"3:磁盘分析"<<endl;
cout<<"4:磁盘备份"<<endl;
cout<<"5:退出"<<endl;
cin>>choice;
}while(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5);
choice = choice-1;
if(choice==4)
return 0;
void (*OperDisk[])()={DiskCopy,DiskFormat,DiskAnalysis,DiskBack};
OperDisk[choice]();
return 0;
}
函数信息的传递有三种方式:
传值方式
传址方式
引用方式
函数重载:函数重载使得一个函数因为有不同的参数而具有不同的功能。
函数指针:
int max(int x, int y);
int (*pi)(int , int );
pi=max;
2.5函数模板
tempale <class Type1,class Type2, ...> 函数返回值类型 函数名 (函数参数表)
{函数模板体}na'me
要强调的是函数模板不是函数,而是一个模板,它与普通的函数有本质的区别。如果函数模板和普通函数重名,那么在调用时普通函数有限。
2.6异常处理
try{
正常语句块
}
catch(类型 变量)
{
异常处理语句块
}
2.7名字空间
namespace 名字空间名
{
声明名字空间中的成员
}
----------------------------------------------------------------------结束-----------------------------------------------------------------------------------------------
例题:用键盘输入一个整数n,将后续输入的n个浮点数相加,将结果输出在屏幕上。
法1:
// chapter2_3.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n;
double sum=0;
printf("请输入相加数的个数:");
cin>>n;
printf("请输入各个数");
double *x;
x = new double[n];
for(int i =0;i<n;i++){
cin>>x[i];
};
printf("下面是总和:");
for(int i = 0;i<n;i++){
sum = sum + x[i];
};
cout<<sum<<endl;
return 0;
}
课本方法2:
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"请输入需要输入的浮点数的个数:"<<endl;
cin>>n;
float *x = new float[n];
for(int i=0;i<n;i++){
cout<<"请输入第"<<i<<"个数:"<<endl;
cin>>x[i];
};
float y=0.0;
for(int i=0;i<n;i++){
y = y + x[i];
};
cout<<y<<endl;
delete x;
return 0;
}