标签(空格分隔): 旭 Program
B站从c到c++入门视频链接
1.c++头文件不必是.h结尾的,c语言中标准库头文件如math.h,stdio.h在c++中被命名为cmath,cstdio
#include
#include
int main()
{
double a=1.2;
a=sin(a);
printf("%lf\n",a);
}
2.除了c的多行注释,c++可用//进行单行注释
/*
c++的多行注释代码
注释一块代码
*/
#include
#include
int main() //程序执行入口,main主函数
{
double a=1.2; //定义变量a
a=sin(a);
printf("%lf\n",a); //用格式符%lf输出a,%lf是double类型
}
3.命名空间namespace
为防止命名冲突(同名),c++引入命名空间namespace
通过::运算符限定某个名字属于哪个命名空间
//如 “1702”::“Bob”
//如 “1703”::“Bob”
#include
namespace first
{
int a;
void f(){/*...*/}
int g(){/*...*/}
}
namespace second
{
double a;
double f(){/*...*/}
char g()
}
int main()
{
first::a=1;
second::a=1.2;
first::a=first::g()+second::f();
second::a=first::g()+6.3;
printf(%d\n",first::a);
printf("%lf\n",second::a);
return 0;
}
3种方法使用namespace中的name
/*
using namespace X;//引入整个命名空间
using X::name//引入单个变量(后name不用再声明空间)
X::name//单次使用X命名空间下变量name
*/
4.c++使用新的输入输出流库(头文件iostream)将输入输出看成一个流并用输出算符<<和输入算符>>对数据(变量和常量进行输入输出)
其中cout和cin分别代表标准输出流对象(屏幕窗口)和标准输入流对象(键盘)
标准库中的名字都属于标准命名空间std
#include
#include
//using namespace std;
using std::cout;//使用单个名字
int main()
{
double a;
cout<<"从键盘输入一个数"<>a;//cin是代表键盘输入流对象,>>等待键盘输入一个实数
a=sin(a);
cout<
5.变量“即用即定义",可用表达式进行初始化
6.程序块{}内部作用域变量不受外部变量名影响(局部变量)
7.for循环语句可定义局部变量
int main()
{
for(int i=0;i<4;i++)
{
for(int i=0;i<4;i++)
{
cout<
8.访问和内部作用域同名的全局变量用全局作用域限定::
#include
using namespace std;
double a=128;//声明全局变量
int main()
{
double a=1.2;
cout<<"Local a="<#include
using namespace std;
int main()
{
double a=3.14;
double &b=a; //b为a的别名,b就是a
b=89; //即a的内存值为89
cout<<"a="<
常用作函数的形参,表示形参和实参为同一对象
使得在函数中对形参的修改也是对实参的修改
&取地址
&a 可作指针导入方法
使得方法中对参数的修改保留:
(1)使用指针导入参数地址(传入地址)
(2)定义输入参数时使用&别名
当实参占据内存大时用引用可代替传值提高效率
若不希望无意修改实参可用常量const修改符
#include
using namespace std;
void change(double &a,const double &b,const double &c)//b为const double不可修改
{
a=1;
b=2; //错!b不可修改
c=3;
}
10.对不包含循环的简单函数,建议用inline关键字声明为“inline内联函数”,编译器将内联函数调用其代码展开,称为“内联展开”,避免函数使用开销,提高程序执行效率
#include
#include
using namespace std;
inline double distance(double a,double b)
{
return sqrt(a*a+b*b);
}
inline声明的函数直接用函数代码代替函数,无函数调用的过程,能提高函数执行效率
11.通过try-catch处理异常情况
正常代码放在try块,catch中捕捉抛出try块中的异常
12.默认形参:函数的形参可带有默认值,必须一律在最右边
double test(double a;double b=1.2;double c)//错!带默认值的b要放最右边
{
return a+b;
}
13.函数重载:c++允许函数同名,只要他们的形参不一样(个数或类型)
调用函数时将根据实参和形参的匹配选择最佳函数
如果有多个难以区分的最佳函数,则变化一起报错!
注意:不能以返回类型区分同名函数!
14.运算符重载
函数名用 operator …(运算符)(参数…)
struct Vector
{
double x;
double y;
}
ostream& operator <<(ostream& o,Vector a)//重载<<输出Vector类型值
{
o<<"("<
15.模板template函数,厌倦了对每种类型求最小值
//可以对任何能比较大小的类型使用该模板让编译器自动生成一个针对该数据类型的具体函数
#include
#include
using namespace std;
template
T minValue(T a,T b)
{
if(a>b)return b;
else return a;
}
template
T1 minValue(T1 a,T2 b)
{
if(a>b)return (T1)b;
else return a;
}
int main()
{
int i=3,j=4;
cout<<"min of"<
16.动态内存分配,关键字nuw和delete比c语言的malloc/alloc/realloc和free更好,可以对类对象调用初始化构造函数或销毁析构函数
17.类:是在c的struct类型上增加了“成员函数”
c的struct可将一个概念或实体的所有属性组合在一起使用,描述同一类对象的共同属性
c++使得struct不但包含数据,还包含函数(方法)用于访问或修改类变量(对象)的数据
#include
using namespace std;
struct date
{
int d,m,y;
void init(int dd;int mm;int yy)//初始化函数
{d=dd;m=mm;y=yy;}
void print()
{
cout<
using namespace std;
struct date
{
int d,m,y;
void init(int dd;int mm;int yy)//初始化函数
{d=dd;m=mm;y=yy;}
void print()
{
cout<
18.构造函数和析构函数
#include
using namespace std;
struct Date
{
int d,m,y;
Data(){d=1;m=1;y=1000;
std::cout<<"constructor"<
19.一写多用写法,构造函数和析构函数
#include
using namespace std;
struct Date
{
int d,m,y;
Data(int dd=1;int mm=1;int yy=1000)//赋值构造函数(在定义时自动调用) 使用默认值
{d=dd;m=mm;y=yy;}
void print()
{
cout<
20.指针在构造函数中的用法+析构函数销毁
#include
#include
using namespace std;
struct student
{
char *name;
int age;
student(char *n="no_name",int a=0)
{
int len=strlen(n);
name=new char[len+1];
strcpy(name,n);
age=a;
cout<<"contructor!"<
21.类模板
#include
#include
using namespace std;
//template //类模板
class Array
{
int size;
double *data;
public:
Array(int s)
{
size=s;
data=new double[s];
}
~Array()
{
delete[] data;
}
double &operator [] (int i)
{
if(i<0||i>=size)
{
cerr<>n;
Array t(n);
t[0]=45;
t[4]=t[0]+6;
cout< d[n];
//d[0]="hello";
}
22.typedef 类型别名
#include
using namespace std;
typedef int INT;
int main()
{
INT i=3;//等价于int i=3;
cout<
23.string
//string对象初始化
#include
#include
using namespace std;
typedef string String;
int main()
{
string s1;//默认构造函数
String s2("HELLO");//普通构造函数
s1="world";//赋值运算符
String s3(s1);//拷贝构造函数
string s4("adaihoahewfoes",10);//取""中前十个字符构成s4
string s5(s4,6,4);//从s4的第六个字符开始取四个字符构成s5
string s6(15,"*");//s6是15个*构成的字符串
string s7(s4.begin(),s4.end()-5);//s7为s4.begin(),s4.end()-5之间值构成的字符串
string s9=s1+"hello"+s2;
}
//访问string内的元素,字符串遍历
#include
#include
using namespace std;
int main()
{
string s=”hel";
string w="wod";
s=s+w;
for(int ii=0;ii!=s.size(),ii++)
cout<
24.vetor
#include
#include
using namespace std;
using std::vetor;
int main()
{
vetor student_marks;
int num_students;
cout<<"输入学生人数"<>num_students;
student_marks.resize(num_students);
for(vetor::size_type i=0;i
26.Inheritance继承(Derivation派生):一个派生类(derived class)
从一个或多个父类(parent class)/基类(base class)继承,即继承父类的属性和行为
但也有自己的属性和行为,如:
#include
#include
using namespace std;
class Employee
{
string name;
public:
Employee(string n);
void print();
};
class Manager:public Employee
{
int level;
public:
Manager(string n,int l=1)
};
Employee::Employee(string n):name(n)//初始化成员列表(多个用逗号隔开)
{
//name=n;
}
void print()
{
cout<