C++第一天

来源:互联网 发布:深度学习算法 编辑:程序博客网 时间:2024/04/30 03:20
五、流位置与随机访问
int fseek (
  FILE* stream, // IO流指针
  long offset, // 偏移量
  int origin // 偏移起点
);
成功返回0,失败返回-1。
origin:
SEEK_END - 从文件尾开始
SEEK_SET - 从文件头开始
SEEK_CUR - 从当前位置开始
fseek (fp, 10, SEEK_SET);
将文件流位置从文件头向文件尾方向移动10个字节。
fseek (fp, -10, SEEK_END);
将文件流位置从文件尾向文件头方向移动10个字节。
fseek (fp, 5, SEEK_CUR);
将文件流位置从当前位置向文件尾方向移动5个字节。
long ftell (
  FILE* stream // IO流指针
);
返回文件流的当前位置。
文件流位置从0开始。
六、可变参数
int a, b;
printf ("%d", a);
printf ("%d%d", a, b);
char* s = "hello";
printf ("%s", s);
va_list
va_start
va_arg
va_end
七、日期时间
time函数返回从1970年1月1日00:00:00到现在的总秒数。
localtime将该秒数变成常规格式的地方时。
八、实用工具
C++课程简介
C++语言基础(6)
  从C到C++
  类和对象
  操作符重载
  继承与多态
  异常与IO流
数据结构与算法(3)
  堆栈和队列
  链表和二叉树
  排序和查询算法
模板与STL(3)
  模板
  典型STL容器
  STL迭代器与泛型算法
阶段项目(2)
  简单的企业管理信息系统EMIS
第一课  从C到C++
一、C++语言概述
C++之父:Bjarne Stroustrup
1979,Cpre,C with Class
1983,第一个C with Class编译器,C++命名
1985,CFront 1.0,《The C++ Programming Language》
1987,GNU C++
1990,Borland C++
1992,Microsoft C++
1998,ISO C++98
2003,修订,C++03
2011,ISO C++2011/C++0X
二、我的第一个C++程序
1.编译方式:
g++ hello.cpp
gcc hello.cpp -lstdc++
2.文件扩展名:
.cpp/.cc/.C/.cxx
3.头文件:
#include <iostream>
#include <cstdio>
#include <stdio.h>
4.输入输出:
用cin对象表示标准输入,用cout对象表示标准输出。
5.名字空间:
std是标准C++库中所有的函数、变量、类型、对象的名字空间。
三、名字空间
1.定义名字空间
namespace 名字空间名 {
  名字空间成员;
}
2.访问名字空间
1)通过作用域限定运算符“::”
2)名字空间指令
using namespace 名字空间名;
可以省去名字空间前缀,但是注意不要因此引入歧义错误。
3)名字空间声明
using 名字空间名::名字空间成员;
4)任何没有被置于某名字空间中的全局变量、函数、类型等均处于无名名字空间中。以如下方式访问之:
::标识符
四、C++的结构、联合和枚举
1.结构中可以定义函数,谓之成员函数,在成员函数中可以直接访问成员变量。
2.可以定义匿名联合变量。
3.枚举是一个独立的数据类型。
五、C++的布尔类型
bool的值域:true、false。
bool类型的变量可以接受任意类型的表达式,其值非零则为true,零则为false。
六、C++的运算符
&& - and
|| - or
^  - xor
{  - <%
}  - %>
七、C++的函数
1.重载:在同一个作用域中,函数名相同,形参表不同的函数之间构成重载关系。
C++编译器通过对函数名按照形参表做编码替换区分不同的重载版本。
如果希望C程序调用C++模块中的函数,需要禁止C++对函数名进行替换:
extern "C" {
  函数1 {...}
  函数2 {...}
  ...
}
一个函数指针究竟指向哪个重载版本由函数指针的类型(包括形参表)决定,而不由调用实参表决定。
2.缺省参数
如果某个参数具有缺省值,那么其右边的所有参数必须都有缺省值。
注意不要因为使用缺省参数导致重载歧义。
3.哑元
只有类型而没有变量名的形参。
4.内联
用函数的二进制代码模块替换函数调用语句,进而节省函数调用的时间开销,其代价是增加目标模块的体积。
建议内联关键字:inline,编译器会根据实际情况决定是否真的做内联。复杂函数、递归函数不内联。
八、C++的动态内存分配

九、C++的引用

第一课    从C到C++
一.C++语言概述
C++之父:Bjarne Stroustrup
1979,Cpre,C with Class
1983,第一个C with Class编译器,C++命名
1985,CFront 1.0,《The C++ Programming Language》
1987,GNU C++
1990,Borland C++
1992,Microsoft C++
1998,ISO C++98
2003,修订,C++03
2011,ISO C++2011/C++0X
1.运行速度快是因为类型是静态确定的,int,double等都是在使用之前就已经定义好了,所以速度快,而如果是动态确定变量的类型,则速度便会慢的很。
2.C语言适合做底层,操作系统,驱动程序,C++做一个折衷,可做底层,也可做一些业务系统如银行,通信。性能不如C,抽象不如JAVA。
二.我的第一个C++程序
#include <iostream>
int main(void){
std::cout<<"hello world"<<std::endl;
return 0;
}
编译方式:
g++ hello.cpp
gcc hello.cpp -lstdc++
文件扩展名:
.cpp .cxx .cc
头文件不同:iostream
输入输出不同:cin,cout
名字空间:std是标准C++库中所有的函数,变量,类型,对象的名字空间。
三.名字空间
namespace 名字空间名{
名字空间成员。
}
namespace ns1{
int a;
void foo(void){
std::cout<<"ns1"<<std::endl;
}
}
namespace ns2{
int a;
void foo(void){
std::cout<<"ns2"<<std::endl;
}
}
访问名字空间:1.通过作用域限定运算符::
2.名字空间指令 using namespace 名字空间名。可以省去名字前缀,但是注意不要因此引入歧义错误。
3.名字空间声明 using 名字空间名::名字空间成员;表示将当前的该名字空间中的该成员加入到当前作用域,只可以让这一个成员不用通过作用域限定运算符。
4.全局无命名空间::a,任何没有被置于某名字空间中的全局变量,函数,类型等均处于无名名字空间中。
四.C++的结构,联合和枚举
1.结构中可以定义函数,但在C语言中不可以定义函数。
#include<iostream>
using namespace std;
struct student{
char name[123];
int age;
void who (void){
cout<<"我叫"<<name<<endl;
}
};
int main(void){
struct student stu={"张飞",28};
stu.who();
return 0;
}
2.在C语言中定义结构体变量时,前面的struct必须有,而在C++中定义结构体变量时,前面的struct可以有。student stu;
3.可以定义匿名联合变量。
表示union括号内的变量以内存重叠的方式使用。指向同一块内存。
#include<cstdio>
using namespace std;
int main(void){
union{
unsigned int un;
unsigned char uc[4];
};//匿名联合变量
un=0x123456789;
size_t i;
for(i=0;i<sizeof(uc)/sizeof(uc[0]);i++)
printf("0x%x ",uc[i]);
cout<<endl;
return 0;
}
4.枚举在C++中是一个独立的数据类型,在C中是一个整数。


五.C++的布尔类型
C++中的布尔类型是一个数据类型,true false
bool类型的变量可以接受任意类型的表达式,其值非零则为true,零则为false;


六.C++的运算符
&&-----and
||-----or
^------xor
上面的可以互用。


七.C++的函数
1.重载:在同一个作用域中,函数名相同,形参表不同的函数之间构成重载关系。
foo(10,1.23f);加f便是float类型,而不加则有可能是double类型。
C++只所以能够实现重载是因为在编译过程中实现了换名,告诉编译器不将你的函数换名:使用如下方法:
extern "C" void hello(void){
cout<<"hello c++"<<endl;
}
C++编译器通过对函数名按照形参表做编码替换区分不同的重载版本。如果希望C程序调用C++模块中的函数,需要禁止C++对函数名进行替换:extern "C"{
函数
}
一个函数指针究竟指向哪个重载版本由函数指针的类型(包括形参表)决定,而不由调用实参的类型决定。


2.缺省参数--即参数有默认值。
void foo(int a,int b=200,int c=100){}
如果某个参数有缺省值,那么它右边的所有参数都必须有缺省值。
防止不要因为使用缺省参数导致重载歧义。
3.哑元
只有类型而没有变量名的形参。起到个占位的作用。
void foo(int a,int){


}
  虽然没有起到作用,但是对重载有点作用。
4.内联
用函数的二进制代码模块替换函数调用语句,进而节省函数调用的时间开销,其代价是增加目标模块的体积。
建议内联关键字:inline,编译器会根据实际情况决定是否真的做内联。复杂函数,递归函数不内联。




0 0
原创粉丝点击