c和c++的区别 语法
2017-12-31 12:49:15 ChasingMoon 阅读数 1591

CPP  cin

//#include<stdlib.h>//C风格
#include<cstdlib>
#include<iostream>

using namespace std;

void main1()
{
	//char str[20] = { "tasklist & pause" };//C风格
	char str[20]{ "tasklist&pause" };//CPP风格
	system(str);

	cin >> str;//输入
	system(str);
}

void main()
{
	int num;
	double db;
	char ch;
	cin >> num >> db >> ch;
	cout << num << db << ch << endl;//结束并换行
	//cin  cout泛型

	system("pause");
}
强弱类型

#include<iostream>

void main()
{
	int num = 100;
	int *p1 = #
	//char *p2 = p1;//无法从int转换为char
	//CPP类型检测严格,精准  强类型编程语言

	//int *p2 = p1;//C语言风格
	int *p2(p1);//CPP写法   ()代表初始化
}
using

#include<iostream>

namespace run1
{
	int x = 10;
}
namespace run2
{
	int x = 20;
}
void run()
{
	using namespace std;//等同于局部变量
	cout << "hello";
	using namespace run1;
	using namespace run2;
	//cout << x;//不明确
}



void main()
{
	std::cout << "hello" << std::endl;
	//std::cout << run2::x << std::endl;//或者下面的写法
	using run2::x;//只因用命名空间的一个变量或函数
	std::cout << x << std::endl;

	std::cin.get();
}
函数的重载和模板函数

#include<iostream>
#include<cstdlib>
using namespace std;

//add CPP函数重载
//int add(int a, int b)
//{
//	return a + b;
//}
//char add(char a, char b)
//{
//	return a + b;
//}
//double add(double a, double b)
//{
//	return a + b;
//}

//函数模板的意义  通用,泛型  调用的时候编译,不调用不编译
template<class T>//模板函数,原生函数优先于模板函数,强行调用模板add<int>(1,2)制定类型
T add(T a, T b)
{
	return a + b;
}

void main1()
{
	cout << add(1,2) << endl;//3
	cout << add('1', '2') << endl;//c
	system("pause");
}

模板接口

#include<iostream>

using namespace std;

void show(int num)
{
	cout << num << endl;
}
void show1(int num)
{
	cout << num +1 << endl;
}
void show2(double num)
{
	cout << num + 1 << endl;
}

template<class T>//把show函数也变成模板
void showit(T num)
{
	cout << num << endl;
}

//泛型接口,任何数据类型,传递函数指针
template<class T,class F>
void run(T t, F f)
{
	f(t);
}

void main()
{
	run(10, show);//10
	run(10, show1);//11
	run(10.1, show2);//11.1

	run("abc", showit<const char*>);//showit模板函数
	//接口,严格类型
	cin.get();
}

类型一致可变参数模板

#include<iostream>
#include<cstdarg>//包含可变参数
using namespace std;

template<class T>
T add(int n, T t...)//第一个代表多少个参数,第二个,多个类型
{
	cout << typeid(T).name() << endl;
	va_list arg_ptr;//开头的指针
	va_start(arg_ptr, n);//从arg_ptr开始读取n个数
	T res(0);//初始化为0
	for (int i = 0; i < n; i++)
	{
		res += va_arg(arg_ptr, T);//根据数据类型取出数据
	}
	va_end(arg_ptr);//结束读取
	return res;
}

void main()
{
	cout << add(4, 1, 2, 3, 4) << endl;
	cout << add(5, 1, 2, 3, 4, 5) << endl;
	cout << add(5, 1.1, 2.2, 3.3, 4.4, 5) << endl;

	cin.get();
}



类型不一致可变参数模板

#include<iostream>
#include<cstdarg>//包含可变参数
using namespace std;

void show()//用来结束递归
{

}
//参数类型不一致,个数不确定  typename   class 都代表类型
template<typename T,typename...Args>//typename...Arge可变参数
void show(T t, Args...args)//Args...args  C++宏定义,可变参数的类型
{
	cout << t << endl;
	show(args...);//递归
}

void main1()
{
	show(1, 1.2, 'a', "123");
	cin.get();
}






2015-10-23 09:58:12 imxiangzi 阅读数 1035

语法区别:

C:使用printf、scanf、 gets、puts等

C++:使用cin、cout

优点:

       C++使用cin和cout有三个突出优点:

       1、简单安全: 根据操作对象自适应的,只需要使用>>或者<<就可以搞定一切

       2、支持用户自定义类型的流操作: 需要重载<<运算符

注意事项:

       1、要使用头文件iostream。cout和cin并不是C++语言中提供的语句,它们是iostream类的对象,故使用的时候必须加上头文件iostream,又因为cout是std名字空间中定义的全局对象,在main函数执行前就已经构造好了,只管用就是,而不用在定义对象等操作。

       2、二者效率不同。至于printf和cout那个快,根据数据不同,会有不同的结果。但是百度上说做ZOJ时,使用cout会有超时的情况,这个要注意。

       3、不同类的输入输出语句不能混合使用。cin和cout搭配使用,printf和scanf搭配使用。因为运行机制不同,混合使用可能会出问题。

 常用语法:
       cin>>变量/指针;

       1、数据流向谁就指向谁。(记忆)(键盘->内存)

       2、变量可以是一个也可以是多个,数据之间可以使用空格、Tab或回车分开

              cin>>a>>b

       cout<<变量/常量(各种类型常量);

       1、  数据流向谁就指向谁。(内存->显示器)

       2、  变量可以是一个、多个、也可以是表达式

             cout<<a<<b<<a+b;

             cout<<endl;

典型问题: 

[plain] view plaincopy
  1. #include <iostream.h>  
  2. #include <stdio.h>  
  3. void main()  
  4. {  
  5.          printf("A\n");     
  6.          cout<< "B\n";       
  7.          printf("C\n");   
  8. }  
  9. 输出结果:  
  10. A  
  11. C  
  12. B  
[html] view plaincopy
  1. #include <iostream.h>  
  2. #include <stdio.h>  
  3. void main()  
  4. {  
  5.     printf("A\n");     
  6.          cout<< "B"<<endl;       
  7.          printf("C\n");   
  8. }  
  9. 输出结果:  
  10. A  
  11. B  
  12. C  

原因:printf不使用缓冲,输入时直接输出到终端,但是cout使用流,有缓冲输出,总是在强制刷新或程序结束后才能显示结果。

cout < < "abc " < <endl; 等价于 cout < < "abc\n ";cout < <flush; (flush使立即强迫缓冲输出)

endl相当于输出回车后,再强迫缓冲输出,包含flush的作用。

通过cout分步执行可以看到,执行cout<< "B\n "时(这里没使用endl或刷新)无内容立即输出,一直到程序而执行cout<< "B"<<endl;时有结果输出。

则cout分步执行时,到程序结束时或使用endl才输出结果到屏幕 而 printf每步运行都有结果输出,有利于调试。

因此,调试的时候,语句中含有cout < < "abc "这种的时候,要加上endl或改成 printf 语句。



FROM: http://blog.csdn.net/insistgogo/article/details/6587824

2014-09-25 12:08:11 u012234115 阅读数 5701

C和C++是两门不同的语言,在平常使用中经常出现混编的情况,因此,搞清楚C和C++语法的某些差别很重要,使得我们清楚哪些语句是可以写在c文件里,哪些只能写在cpp文件里的。


1,在C++中,民,局部变量可以在一个程序块内在任何地方声明,在C中,局部变量必须在程序块的开始部分,即在所有"操作"语句之前声明,请注意,C99标准中取消了这种限制。例如:在C++中,for语句中可以出现for(int i=0;i<5;i++),即定义i的同时使用它;但在C中不能这样,只能先定义,然后再使用。int i;for(i=0;i<5;i++)。


2,在C中,按如下方式声明的函数没有对函数参数进行任何说明;
    int func();
     也就是说,如果没有在函数后面的括孤内指定任何参数,这在C中就意味着对函数参数未做任何声明,该函数可能有参数,也可能没有参数,然而,在C++中,这样的函数声明意味着该函数没有参数,也就是说,在C++中,下面这两个函数声明具有同样的作用:
    int func();
    int func(void);

    在C++中,参数列表中的void是任选的.许多C++程序员使用它们是为了表明函数没有任何参数的,以便于他人理解程序.但是,从技术上说,void不是必须的。


3,在C++中,所有函数均必须被设计成原型,但这在C中只是一种选择.编程经验表明,在程序中也应该给函数采用原型设计方法。


4,在C与C++之间还存在一个重要而又细微的差别,即字符常数在C中被自动作为整形来处理,但在C++中则不然.


5,在C中,多次声明一个全局变量虽然不可取,但不算错.在C++中,多次声明同一个全局变量会引发错误.


6,在C中,一个标识符可以至少31个有效的组成字符.在C++中,一个标识符的所有组成字符均是有效的.可是,从实用角度看,过长的标识符没有太大的用处,不仅不便于记忆,而且还会增加出现打字错误的可能性.


7,在C中,在程序内部调用main()函数的情形不常见,但这种做法是容许的,在C++中,这种做法是不容许的. 


8,在C中,无法获得register型的地址,在C++中则可以获得这种地址.


9,在C中,如果类型声明语句中没有指定类型名,该类型被假定成int,这种隐式转型在C99与C++中是不允许的.


10,标准C++所定义的新式头部文件,新式C++头部文件不再使用.h扩展名。如:#include <iostream>   #include <cmath>


11,类与结构体的区别:类与结构体是相互关联的

   结构是C的一部分,C++从C中继承了结构,在语法上,类与结构十分相似,在关系上,这两者也很接近,在C++中,结构的作用被拓宽了,进而使结构成为了类的一种替代方法.实际上,类与结构的惟一区别在于:在默认状态下,结构的所有成员均是公有的,而类的所有成员是私有的.除此之外,类与结构是等价的,也就是说,一个结构定义了一个类的类型.

   C++同时包含这两个等价的关键字struct与class基于3个方面的原因.第一,加强结构的能力.在C中,结构提供了一种数据分组方法,因而让结构包含成员函数是一个小小的改进.第二,由于类与结构是相互关联的,所有现有C代码到C++的移植变得更容易.第三,由于类与结构的等价性,提供两个不同的关键字可以使类定义自由发展,为了保持C++与C的兼容性,结构定义必须始终受它的C定义的结束.
   即使在有些地方可以使用结构来代替类,但尽量不要这么做,为了清楚起见,该用类的地方就用class关键字,该用C结构的地方就用struct关键字.

12,类与联合是相互关联的
    联合也可以用来定义类.在C++中,联合包含成员函数,变量以及构造与析构函数.C++联合保留了C联合的全部特征,其中最重要的特征是所有数据元素共享内存的相同地址.与结构类似,联合的成员在默认状态下也是公有的,并且完全兼容于C.与结构一样,C++中的联合声明定义了一种特殊的类,进而意味着保持了类的封装原则.
    C++的联合有几个必须遵守的使用限制.第一,联合不能继承其他任何类型的类.第二,联合不能是基类,不能包含有虚函数成员.静态变量不能是联合的成员.联合不能使用引用成员,而且不能有任何作为成员的重载赋值运算符的对象.第三,如果一个对象包含明确的构造或析构函数,该对象不能成为联合的成员.
    C++有一个叫做匿名联合的特殊联合.匿名联合没有类型名,也不声明任何变量,只是告诉编译程序它的成员变量共享一个内存地址.但是,变量本身无需要使用常规的点运算符语法即可直接引用.

    上述联合的使用限制也适用于匿名联合,但下面这两个限制除外,第一,匿名联合所包含的元素只能是数据,不能包含成员函数,也不能包含私有或受保护元素;第二,全局匿名联合必须声明成静态的.


13,在C++中定义struct,union和enum类型的变量时,关键字struct,union和enum可以省略;在C中不能忽略。


14,在C++中,可以用const类型的整数作为数组的大小,而在C中不可以。


15,在C中,const类型的变量是对外可见的,所以只能出现在源文件中;而在C++中,const类型的变量只有内部可见,所以可以出现在头文件中。例如:在C源文件中通过语句const int i = 2;定义i,因为它是对外可见的,所以在其它的模块中可以通过声明extern const int i;来引用它;而在C++中,因为const类型的变量默认只有内部可见,如果想定义对外部可见的变量,必须用extern修饰,例如用extern const int i = 2;定义变量i,如果是在C++文件中定义一个在C中使用的变量,可以用extern "C" const int x=10;语句。


16,动态开辟内存 C中用malloc 和free,C++中用new和delete或者delete []


暂时就知道这么多,以后再补充。

2009-10-31 16:14:00 lqk1985 阅读数 913

 1.在C++中,for语句中可以出现for(int i=0;i<5;i++),即定义i的同时使用它;但在C中不能这样,只能先定义,然后再使用。int i;for(i=0;i<5;i++)。
2.在C++中定义struct,union和enum类型的变量时,关键字struct,union和enum可以省略;在C中不能忽略。
3.在C++中,可以用const类型的整数作为数组的大小,而在C中不可以。
4.在C中,const类型的变量是对外可见的,所以只能出现在源文件中;而在C++中,const类型的变量只有内部可见,所以可以出现在头文件中。例 如:在C源文件中通过语句const int i = 2;定义i,因为它是对外可见的,所以在其它的模块中可以通过声明extern const int i;来引用它;而在C++中,因为const类型的变量默认只有内部可见,如果想定义对外部可见的变量,必须用extern修饰,例如用extern const int i = 2;定义变量i,如果是在C++文件中定义一个在C中使用的变量,可以用extern "C" const int x=10;语句。
5.因为C++中有new关键字,所以可以使用new动态分配数组,这样数组在定义的时候其大小可以根据运行中的数据进行指定,用完后使用delete []删除。而在C中,数组定义的时候必须明确指定其大小。

2011-07-06 13:22:10 insistGoGo 阅读数 4359
  

语法区别:

C:使用printf、scanf、 gets、puts等

C++:使用cin、cout

优点:

       C++使用cin和cout有三个突出优点:

       1、简单安全: 根据操作对象自适应的,只需要使用>>或者<<就可以搞定一切

       2、支持用户自定义类型的流操作: 需要重载<<运算符

注意事项:

       1、要使用头文件iostream。cout和cin并不是C++语言中提供的语句,它们是iostream类的对象,故使用的时候必须加上头文件iostream,又因为cout是std名字空间中定义的全局对象,在main函数执行前就已经构造好了,只管用就是,而不用在定义对象等操作。

       2、二者效率不同。至于printf和cout那个快,根据数据不同,会有不同的结果。但是百度上说做ZOJ时,使用cout会有超时的情况,这个要注意。

       3、不同类的输入输出语句不能混合使用。cin和cout搭配使用,printf和scanf搭配使用。因为运行机制不同,混合使用可能会出问题。

 常用语法:
       cin>>变量/指针;

       1、数据流向谁就指向谁。(记忆)(键盘->内存)

       2、变量可以是一个也可以是多个,数据之间可以使用空格、Tab或回车分开

              cin>>a>>b

       cout<<变量/常量(各种类型常量);

       1、  数据流向谁就指向谁。(内存->显示器)

       2、  变量可以是一个、多个、也可以是表达式

             cout<<a<<b<<a+b;

             cout<<endl;

典型问题: 

#include <iostream.h>
#include <stdio.h>
void main()
{
         printf("A\n");   
         cout<< "B\n";     
         printf("C\n"); 
}
输出结果:
A
C
B
#include <iostream.h>
#include <stdio.h>
void main()
{
	printf("A\n");   
         cout<< "B"<<endl;     
         printf("C\n"); 
}
输出结果:
A
B
C

原因:printf不使用缓冲,输入时直接输出到终端,但是cout使用流,有缓冲输出,总是在强制刷新或程序结束后才能显示结果。

cout < < "abc " < <endl; 等价于 cout < < "abc\n ";cout < <flush; (flush使立即强迫缓冲输出)

endl相当于输出回车后,再强迫缓冲输出,包含flush的作用。

通过cout分步执行可以看到,执行cout<< "B\n "时(这里没使用endl或刷新)无内容立即输出,一直到程序而执行cout<< "B"<<endl;时有结果输出。

则cout分步执行时,到程序结束时或使用endl才输出结果到屏幕 而 printf每步运行都有结果输出,有利于调试。

因此,调试的时候,语句中含有cout < < "abc "这种的时候,要加上endl或改成 printf 语句。

C和C++的一些语法区别

阅读数 2506

①struct在C语言中,试用定义的struct类型的变量方式:struct[定义的变量][生成的变量];在C++语言中,试用定义的struct类型的变量方式:struct[定义的变量][生成的变量]或者[定义的变量][生成的变量]。在C语言中struct定义的变量中不能有函数,而在C++中可以有函数。②函数的参数以及返回值(以test()为例)C...

博文 来自: qq_24964575

C/C++语法

阅读数 362

1.关于strcpy charstr1[5]; char*str2="01234"; strcpy(string,str2);以上代码会出现什么问题:str1需要6个字节才能存放下str1的内存,而str1定义的大小为5,因此会出现数组越界。 charstr1[5],str2[5]; inti; for(i=0;i

博文 来自: YANGHUI_429

C和C++的函数指针语法

阅读数 1325

1 定义一个函数指针且不论语法,有两种不同形式的指针函数:一个是指向普通的C函数的指针和C++的静态成员函数,另外一个是指向C++的非静态成员函数的指针。这两者的基本区别是所有指向非静态成员函数的指针都需要这个隐含定义:指向本类的一个This指针。注意:这两种函数指针彼此不兼容。既然一个函数指针实际上和一个变量没有什么区别,定义它的时候也就没有什么特殊。下面的例子中我们定义3个

博文 来自: okhere

C和C++的函数指针语法

阅读数 507

2008-02-0322:59    777人阅读    评论(0)    收藏    举报    1 定义一个函数指针且不论语法,有两种不同形式的指针函数:一个是指向普通的C函数的指针和C++的静态成员函数,另外一个是指向C++的非静态成员函数的指针。这两者的基本区别是所有指向非静态成员函数的指针都需要这个隐含定义:指向本类的一个This指针。注意:这

博文 来自: BullJordan23

C与C++语法的不同点

阅读数 377

 Linux下通常使用免费的编译器gcc。其中gcc主要用来编译C语言代码,g++主要用来编译C++代码。如果想用gcc编译c程序,则要注意C与C++对语法要求的不同点,例如:1) C程序是从main函数开始,C++程序是从全局变量的构造函数开始2) 变量必须声明在语句前3) 没有bool类型4) 声明枚举变量是必须在枚举类型前加上enum,而C++则不需要5) 不支持引用

博文 来自: zyp2671
没有更多推荐了,返回首页