C++基础篇之常用的概念介绍

5 篇文章 0 订阅

**

C++

**

1,解释型语言和编译型语言

解释型语言:语法固定,用来做测试
编译型语言:更加随心所欲(c  c++)
		c: 面向过程的语言:一旦出现了问题就没有办法向下执行
		c++:  面向对象的语言:一个项目由多个对象组成,一个对象出现问题,其他的对象可以执行,效率最高
c与c++的区别:
	c :面向过程            c++:面向对象

2,c++基于c语言有如下方面的增强:

	更加严格的类型检查
		int main()
		{
			int *p=0x1234567;
			return 0;
		}
		在c语言编译:警告warning
		在c++语言中:错误error
	新增变量引用
	支持面向对象
			类和对象,继承,多态,虚函数及RTTI(运行时类型识别)
	增加泛型编程(template),标准模板库(STL)
	支持异常处理
	支持函数及运算符重载
	支持命名空间
			用于管理函数名,变量及类

3,c++编译过程

				g++  -s 文件名:生成汇编语言
			预处理-----》编译-----》汇编------》链接
			预处理:g++  -E 1.cpp -o 1.i       展开头文件,替换宏定义
			编译:   g++   -S  1.i   -o  1.s       检查是否有语法错误(将原文件编译成汇编文件)
			汇编:    g++   -c  1.s  -o  1.o        通过汇编文件转换成二进制的目标文件
			链接       g++   1.o                         将二进制的目标文件链接成可执行的文件(程序)

4,c++ 融合了三种编程方法

     {
     			1,c语言的面向过程编程
     			2,c++基于c语言扩展的面向对象编程
     			3,   c++模板支持的泛型编程
     }

5.常变量

	在c++中const变量必须初始化

	const int i;//error
	const int i=0;
	int main()
	{
		/*c++中const变量必须初始化*/
		//const 定义的变量直接成寄存器去取,导致改变没有成功,需要防止优化
		volatile  const i=0;  //加上上volatile之后i=100,p=100
		//const int i=0; //不加volatile  i=0,p=100
		//const int i;//error
		cout <<"i="<<i<< endl;
		int *p=(int *)&i;
		cout << "p=" << p << ",,&i=" << (int*) &i << endl;//p和&i的地址相同
		*p=100;
		cout << "i="<< i<< ",*p=" << *p<< endl;
	}

8.强制转换

	c语言强制类型转换的一般形式:(类型名)  (表达式)
	(double)a   
	c++ 还增加了以下形式:类型名(表达式)
	int (x)     int(x+y)
	int main()
	{
		double a=5.5;
		int b;
		b=(int)a+int(a);//10
		cout<<b<<endl:
		b=int(a+b)
		cout<<b<<endl;//15
	}

9.引用 ------------------------------>最常用的是在传参数中

   对于一个变量可以使用引用,不是常量
   引用是一种新的变量类型,作用:对变量取别名
   		int a=5;
   		int &b=a;//给a变量取别名b,b的类型:int&
   		引用的作用范围:通常作为函数穿参使用,可以尽量减少指针的使用,还可以提升效率
   		eg :
int main())
{
		int a=5;
		//int &b;  //error
		int &b=a;//引用变量必须初始化,表明是给谁取别名
		cout <<"a="<<a<<",b="<<b<<endl;//b=a=5
		cout <<"&a="<<&a<<",&b="<<&b<<endl;//a和b地址一样
		b=100;
		cout<<"a="<<a<<",b="<<b<<endl;//b=a=100
		cout<<"&a="<<&a<<",&b=<<&b<<endl;//a和b地址一样
		int c=10;
		b=c;//把c的值赋给变量b
		cout <<"a="<<a<<",b="<<b<<endl;//b=a=10
		cout<<"&a="<<&a<<",&b="<<&b<<endl'//a和b地址一样
}
	eg:
   void  swap(int &m,int &n)//m=a,n=b
   {
   			int  t;
   			t=m;
   			m=n;
   			n=t;
   }
	int main()
	{
			int a=5;
			int b=39;
			swap(a,b);
			cout << "a=<<a<<endl;
			cout <<"b="<<b<<endl;
	}

10.内联函数inline

			是一种提高效率的方法
			即在编译时将所调用函数的代码直接嵌入到主调函数中。这种嵌入到主调函数中的函数称为内嵌函数(inline  function)
			内联函数语法
				inline 存储类型  数据类型  函数名(参数列表)
			注意:
					1.内联函数可以提高运行速度,但是会增加代码的长度
					2,因为多个文件是分开编译的,所以需要把内联函数的声明及定义放在头文件中
					3,需要频繁使用的函数才会用到内联函数
	eg:
		inline  void function()
		{
				int a =100;
		}
		int main(int argc,char *argv[])
		{
				int i;
				for(i=0;i<10000000;i++)
					{
							function();
					}
					return 0;
		}
		//time  ./out  ------------------->查看花费的时间

11,函数的重载

	c中不可以函数的重载
	函数的重载:
						同一函数名可以有多个函数的定义,这些函数通过参数来区别
						要求函数的参数不同,参数的个数及类型,与返回值无关
		int  add( int a);
		double add(int a);//error,重载函数与函数名及参数有关,与返回值无关,有歧义
		int add (int a,int b);
		int add(int a,int b,int v);
		
		函数重载是否会产生歧义?
					由函数调用时满足传参的函数个数决定,如果只有一个函数满足条件就不会产生歧义,否则会产生
int add(int a)
{
	return (a+a);
}
int add (int &a)
{
	return (a+a);
}
int main()
{
	cout <<add(5)<<endl;
	int a=10;
	//cout <<add(a)<<endl;//error 歧义
	return 0;
}

12,函数的默认参数值

c++允许赋予函数默认参数
函数的默认参数:

  • 在定义或声明函数时,可以给函数参数设置默认值
  • 当函数调用时,被设置了默认参数可以传参数也可以不传参数
  • 当没有给默认参数值的参数传参时,那么给参数的值就是设定默认参数的值,而如果给有默认参数的参数传参时,那么该参数的值就是传过去的参数。
    注意:
    1,当在函数定义时设置默认参数时,函数的定义需要放在main的前面
    2,默认参数值从后往前设置,一旦某一个参数有默认参数值,后面的所有参数都必须有默认值
int add(int a=1,int b,int  c=10)//error
int add (int a,int b=2.int c=10)
cout<<add(2)<<endl;

3.当重载与默认的参数值相连接,容易参数歧义

int add(int a=5)
{
		return (a+a);
}
int add(int a,int b=100)
{
	return (a+a)
	}
	int man()
	{
			cout<<add(5)<<endl;//歧义
			cout<<add(5,9)<<endl;
			cout <<add()<<endl;//add(in a=5)
		}

12.结构体

1,在c++中可以直接用结构体名作为结构体类型

struct STU{
		int a;
		};
		STU stu;
		stu.a=10;
		STU *p=&stu;
		p->a;

2,结构体中可以直接添加成员函数,访问方式与成员变量一样

struct STU{
	int fun{
		}
			int a;
	};
		重点:c与c++中struct有什么不同
				c中的struct不可以含有成员函数,而c++中可以。可以直接用结构体名作为结构体类型。
				c++中struct和class的主要区别在与默认的存取权限不同,struct默认为public,而class默认为private
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值