c++学习笔记(一)

原创 2013年12月02日 17:21:32

1.1 热身

#include<iostream>
using namespace std;
int main()
{
      int a,b;
      cout<<"input two number"<<endl;
      cin>>a>>b;
      cout<<a<<" "<<b<<endl;
      return 0;
}
(1).第三行int 表示main函数的返回值为整数。第六行的作用是向操作系统返回0,如果程序不能正常运行则向操作系统返回一个非零值,一般为-1.

(2).注释://单行注释;/* ……*/多行注释

(3).cout是c++系统定义的对象名,称为输出流对象,<< 是插入运算符,<<将右侧“ ”内字符串等插入到输出队列cout中去。

(4).#include<iostream>是预处理命令,标准c++要求系统提供的头文件不带.h,用户自己编制的头文件可有后缀.h,c++可用c编译系统,可带带.h。

(5)c++标准库中的类和函数是在命名空间std中声明的。第二行意思是使用命名空间std,表示要用到std中的内容。c语言无命名空间,因此用带后缀.h的头文件时不必用using namespace std;

(6).cin称为输入流对象,>>是提取运算符,从输入设备中(如键盘)提取数据送到输入流cin中去。

(7).endl表示行结束,与'\n'作用相同,end of line。

(8).键盘和显示器上的输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作的流式文件。

1.2类

class Student
{
    private:       //私有部分
      int num; //学生学号     //私有变量
      int score; //学生分数
    public:
      void setdata()    //公用函数
      {
          cin>>num;
          cin>>score;
      }
      void display()  //定义公用函数display,输出信息
      {
          cout<<"num="<<num<<endl;
          cout<<"score="<<score<<endl;
       }
};

Student stud1,stud2;  //定义Student类的对象
stud1.setdatd();   //通过对象调用类内方法
stud2.diaplay();……

(1).一个类是由一批数据(属性)以及对其操作的函数(方法)组成。

(2).数据和函数分为两大类。私有的private:只能被本类中的函数调用,不能被类以外调用。共用的public:可被类内函数调用,也可被类外语句调用。

(3).类不占实际存储空间,对象占实际存储空间。

(4).  “.”是成员运算符。

1.3 const定义常变量

#define PI      3.14149
const float PI=3.14159

(1).#define PI    3.14159,实际上只是在愈编译时进行字符转换,把程序中出现字符串PI的全部位置换为3.14159,PI不是变量,没有类型,不占存储单元。但define不靠谱

#define  R  a+b       R*R并不是(a+b)*(a+b),而是a + b * a + b。

(2).const 具有变量属性,具有数据类型,占用存储单元,有地址,可用指针,变量值固定不变。

1.4函数重载

输出数中最大的数,可设计为:

int  sort(int a,int b,int c);
float sort(float a,float b,float c);
long sort(long a,long b);

输入三个数,系统根据数据的类型或数据的个数选择相应的函数。函数重载即一个函数名多用,参数个数和类型可以都不同,参数个数和类型必须至少有其中之一不同,函数返回值也可不同。不允许参数类型和个数都相同而返回类型不相同。

1.5函数模板

template <typename T> 或 template<class T>

例:输出数中最大的数,可设计为:

int  sort(int a,int b,int c);
float sort(float a,float b,float c);
long sort(long a,long b,long c);

用函数模板可为:

template<typename T>;
T sort(T a,T b,T c)
{
     if(b > a) a = b;
     if(c > a)  a = c;
     return   a;
}

函数模板只适用于函数的参数个数相同而类型不同的情况。

1.6有默认参数的函数

float area(float r = 6.5);   //函数声明
area();        //函数调用时相当于area(6.5)

float volume(float h,float r = 12.5);   //函数声明
volume(45.6);      //函数调用,相当于volume(45.6,12.5);
volume(34.2,10.4)     //函数调用,相当于volume(34.2,10.4);

实参与形参的结合是从左至右,指定默认值的参数必须放在形参列表的最右端。

注:一个函数不能既作为重载函数,又有默认参数的函数。

例:

int max(int a,int b,int c=100) ;   //函数声明 
int max(int a,int b)  ;  //函数声明
max(5,32)   对于此函数系统就不知到该调用哪个了。

1.7变量的引用

1.

int   a;
int   &b = a;   //声明b是一个整形变量的引用变量,他被初始化为a

(1).&:是引用声明符,此时不带表地址,对变量声明一个引用并不另开辟存储单元,b和a都代表同一变量单元,共享同一内存。在声明一个引用时,必须同时初始化,即声明它代表那一个变量。由于引用不是独立的变量,编译系统不给他单独分配存储单元,因此在建立引用时只有声明,没有定义,只是声明它和原有的某一变量的关系。

(2).

int  &b;       //错误,没有指定b代表哪个变量
float   a; int    &b    =   a;      //错误,b是一个指向整形的变量的别名,而a是float形

(3)

 int     &a  =  p; //  &是引用声明
int      p    =     & a;  // &是取地址符

(4)引用初始化后不能再被重新声明为另一个变量的名。          

 2.引用作为函数参数        

(1).将变量名作为实参:传给形参的是变量的值,传递是单向的,形参值不传给实参,形参和实参不是同一存储单元。

(2).传递变量的指针:形参得到一个变量地址,形参指针变量指向实参变量单元。例:

void swap(int   *p1,   int   *p2);     // 函数声明
swap(&   i,&  j)    //函数调用

*p1 和  i  ,*p2   和  j  共用一个存储单元

(3).传送变量的别名:

void  swap (int   &a, int   &b);/// 函数声明
swap(i  , j);   //函数调用

实参传给形参是实参的地址,即形参a和i具有同样地址,a和i共享同一单元。


两种传递数据方式:传值方式调用(实参传给形参值);引用方式调用(实参的地址传给形参)

指针与引用区别:指针变量需要开辟存储空间,可以为空。引用是变量的别名,不能为空。

3.进一步说明

(1).不能建立void类型的引用

(2).可将变量的引用的地址赋给一个指针,int a;int   &b = a;int  *p = &b;  但不能定义指向引用类类型的指针变量,int  *p = &a;

(3).可以建立指针变量的引用:int i;int  *p = &i;int  &pt  =  p;

(4).用const 对引用加以限定,不允许改变引用的值。

int   i  =  5;
const  int  &a = i;  //声明常引用,不允许改变a的值
a = 3 ;     //错误,a的值不能改变。

(5).可用常量或表达式对引用进行初始化,但必须用const作声明。

int   i   =   5;
const   int   &a = i + 3;  //系统内部:const &a = i  + 3;转换为int   temp = i  + 3;const  int &a = temp;

1.8内置函数  

内置(内嵌/内联)函数:嵌入到住函数中的函数。

inline  int   max(int a,int b,int c)  //关键子inline,内置函数的声明方式。

例:

   

   #define   power(x)   x*x        则 power(2)   =   4       power(1+1)   =    3
      inline  int  power(int  x)  {  return x*x  }     power(1+1) =  4   避免宏定义的副作用

内置函数可节省运行的时间。循环switch,递归,静态存储不能用内置函数

1.9作用域运算符

"::"作用域运算符

在main函数中局部变量将屏蔽全局变量

float  a = 12.33;
int  main()
{
    int a = 9;
    cout<<a<<endl;      //输出局部变量a的值9
    cout<< ::a <<endl;   // 输出全局变量a的值12.33
}

2.0  new/delete

float  * p = new float(3.1458);

delete p;

new 类型  【初值】

delete 【】  指针变量

new 和 delete 是运算符,不是函数。malloc 和 free 是c语言利用库函数分配和撤销内存空间的。

2.1c++的编写合实现

1.用c++语言编写程序:高级语言编写程序-------源程序(source program) .cpp文件

2.对源程序进行编译:编译器把源程序翻译成二进制形式的目标程序(object program).obj或.o文件

3.将目标文件内链接:所有目标程序和系统的库文件以及系统提供的其他信息链接,生成可执行二进制文件.exe

4.运行程序

5.分析运行结果


C++中的#,##,和"

想要灵活应用宏,离不开#和##。 " 在学习#和##之前,先来看一个关于"的例子: #include #include int main() { const char* p1 = ...
  • mzlogin
  • mzlogin
  • 2014年11月09日 22:47
  • 7579

C++中的::的作用

(1)作用域限定符,当在类体中直接定义函数时,不需要在函数名字的前面加上类名,但是在类体外实现函数定义的时候,必须加上类名并且加上作用域限定符。Student::Display(); (2)...
  • zhanghuaichao
  • zhanghuaichao
  • 2017年02月18日 21:44
  • 2252

浅论C++的复杂性

C++语言已经有了20多年的历史。作为一门影响广泛的编程语言,它所受到的关注和争论恐怕是任何一门其他的语言所不能比拟的。十几年前,Java等新生语言的出现曾导致“C++信任危机”,但最终C++以自身非...
  • K346K346
  • K346K346
  • 2015年12月05日 11:56
  • 1737

c/c++中指针的理解(初学者)

关于指针,大家肯定不陌生,一些初学者,想必会出现思绪混乱的情况,现在我就来帮大家缕一缕吧。(第一次写微博 有点小紧张) 大家应该了解一些计算机对内存的管理方式吧。操作系统会将内存单元进行编号,这些...
  • Allen_ww
  • Allen_ww
  • 2016年01月11日 19:41
  • 8775

没事写点啥(一)——C++扫雷

整天编学校的作业实在枯燥,不如……写点别的?
  • destinyson
  • destinyson
  • 2016年02月29日 14:17
  • 1762

C++笔试题目大全(笔试宝典)(不断完善中)

1.new 、 delete 、 malloc 、 free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数。 malloc 与 f...
  • Lina_ACM
  • Lina_ACM
  • 2016年06月07日 13:29
  • 21411

C/C++中“#”和“##”的作用和用法

C/C++中“#”和“##”的作用和用法!
  • fengbingchun
  • fengbingchun
  • 2015年03月08日 16:15
  • 3385

C++ 进程间的通讯(一):简单的有名管道实现

进程间的通讯(一):简单的有名管道实现 一 管道简介 命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是命名管道可以在不相关的进程...
  • u010797208
  • u010797208
  • 2014年11月28日 02:09
  • 6574

OpenCV中Mat的C++用法介绍

Mat       OpenCV 自 2001 年出现以来。在那些日子里库是围绕C接口构建的。在那些日子里,他们使用名为IplImage C 的结构在内存中存储图像。这是您将在大多数较旧的教程和...
  • wadefan7
  • wadefan7
  • 2015年03月05日 15:53
  • 4293

关于C和C++一些大神们的讨论

知乎上曾经有一个关于C和C++语言的讨论,弄的沸沸扬扬。余天升 开源社区一直都不怎么待见C++,自由软件基金会创始人Richard Stallman认为C++有语法歧义,这样子没有必要、非常琐碎还会...
  • wangshubo1989
  • wangshubo1989
  • 2016年02月23日 20:33
  • 2636
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++学习笔记(一)
举报原因:
原因补充:

(最多只允许输入30个字)