c++简介:
c++是面向对象的编程,特点可以概括为4个字:封装、抽象、继承、多态,把对象的属性和方法集合成一个独立的系统单位,尽可能隐藏对象的内部细节,对具体的问题进行概括的过程,子类对象拥有与基类相同的全部属性和方法,子类继承基类的属性和行为后,可以具有不同的数据类型和表现行为等特性。
常用代码、函数介绍:
cout:console out(控制台输出)属于basic_ostream类的对象。输出流:数据结构+序列的索引。
using namespace std: 名字空间,c++标准库使用的所有标识符(类,函数,对象等名称)在同一个特殊的名字空间std来定义,在没有using namespace std时,可以使用 std::cout。
<< 在c++里面表示流操作符,支持重载
cin >> i , cin输入操作符(提取操作符)ifstream in: in.open()
ifstream in(char* filename, int open_mode)
ios::in--打开一个可读取文件
ios::out--打开一个可写入文件
ios::binary--以二进制形式打开文件
ios::app--写入所有数据将被将入文件的末尾
ios::trunk--删除文件原来已经存在的内容
ios::nocreate--如果要打开的文件并不存在,那么以此参数调用open函数将无法进行
ios::noreplace--如果要打开的文件已存在,师徒用open函数打开时将返回错误
ios::beg--使得文件指针指向文件头
ios::end--使得文件指针指向文件尾
数据类型:数组、指针、结构:
一个数组可以把很多同类型的数值存在一个变量名下
e.g 任务:定义个数组容纳10个整数来自用户输入,计算这些值的累加和、平均值并输出
#include <iostream>
#define ITEM 10
#define input_add()
int main()
{
//const unsigned short ITEM = 10;
int num[ITEM];
std::cout << "please input" << ITEM << "int number!\n\n";
input_add();
return 0;
}
void input_add()
{
for(int i=0; i<ITEM; i++)
{
std::cout << "please input" << i+1 << "number\n";
std::cin >> num[i]
while(!(std::cin >> num[i]))
{
std::cin.clear();
std::cin.ignore(100,'\n');
std::cout << "please input again! \n";
}
}
int total = 0;
for(int j=0; j<ITEM; j++)
{
total += num[j]
}
std::cout << "total is " << total << "\n"
std::cout << "mean is " << (float)total/ITEM;
std::cout << "\n"
}
指针:程序运行在计算机的内存上,指针指向数据的存储地址,是存放地址的特殊类型器变量,使用什么类型的指针,就要使用什么类型的指针变量,创建变量时:系统分配内存保存,每个内存块拥有一个独一无二的地址,变量的地址可以用 &variablename 语法来取得,指针的类型必须由保存其地址的变量类型一致。
int a = 345;
char b = 'C';
int *aPointer = &a;
char *bPointer = &b;
下面的代码,第一个输出的是345,第二个输出的是123,第一个是输出a的地址所对应的值,第二个输出的是将a指针地址的值赋值为123。
std::cout << *aPointer;
//*aPointer = 123; 会改变a的值
数组可以拥有很多个地址,每个地址对应一个元素,数组的名字指向数组的第一个元素
int myArray[3]={1,2,3};
对象的基础--结构:
结构是由程序员定义的、由其他变量类型组合而成的数据类型
语法结构如下,当要处理多种属性的数据时,结构是很好的选择
struct name
{
type varName1;
type varName2;
......
}
e.g
struct Student
{
std::string name;
std::string id;
char sex;
};
Student Children;
Children.name = 'xiaoming';
Children.id = '0001';
Children.sex = 'M'; //'.'作用符用于对结构成员进行赋值
结构和指针:
以下代码通过指针解引用指向结构的成员
Student Children = {"xiaoming", "00001", 'M'}
Student *pChildren = &Children;
(*pChildren).name = "lilei";
(*pChildren).id = "0002";
联合、枚举和类型别名
整数、实数、字符、字符串、数组、指针、结构
优于数组的向量vector
联合:与结构相似,但是每次只能存储值中的一个,第二个数据进去,第一个数据就消失了
union mima
{
unsigned long birthday;
....
};
对象:
对象内部可以有变量(属性)和函数(方法),对象将使用变量来存储信息,调用函数来进行操作,结构内部只有变量,对象的模型---类
class 类决定对象的功能、属性
//定义一个汽车的类
#include <iostream>
#include <windows.h>
#define FULL_GAS 85
class Car
{
public:
std::string color;
std::string engine;
float gas_tank;
unsigned int Wheel;
void setColor(std::string col);
void setEngine(std::string eng);
void setWheel(unsigned int whe);
void fill_tank(float liter);
void running(void);
void warning(void);
}
void Car::fill_Tank(float liter)
{
gas_tank +=liter;
}
void Car::running(void)
{
}
void Car::warning(void)
{
}
void Car::setColor(std::string col)
{
}
void Car::setEngine(std::string eng)
{
}
void Car::setWheel(unsigned int whe)
{
}
int main()
{
char i;
Car mycar;
mycar.setColor("blue");
mycar.setEngine("v8");
mycar.setWheel(4);
mycar.gas_tank = FULL_GAS;
while(mycar.running())
{
if(mycar.running() < 10 )
{
mycar.warning();
std::cout << "input?(y/n)\n";
std::cin >> i;
if( 'y' == i || 'Y' == i )
{
mycar.fill_tank(FULL_GAS);
}
}
}
return 0;
}
:: 是作用域解析符,表示fill_tank是属于Car的类,作用是告诉编译器这个方法存在何处,或者说是属于哪一个类,对象与结构有很多相似之处,但是对象可以拥有自己的函数