您的位置:首页 > 编程语言 > C语言/C++

C++ c++与C语言的区别(struct类型的加强,函数-变量类型加强,bool类型)

2016-06-11 10:48 639 查看
//区别④:struct类型的加强(C++版本)
#include<iostream>
using namespace std;

//C++中的struct是一个新类型的定义声明
//c++中结构体的默认访问权限public,和类不同
struct Teacher{
//char name[20]="小米";//报错 error C2536: “Teacher::Teacher::name”: 无法指定数组的显式初始值设定项
//错误原因:上面这种初始化,同时完成了内存空间的分配和内容的初始化。
//但是结构体在类型定义的时候并没有分配内存,所以报错,对于int age=1;可能是c++编译器做了特殊处理
char name[20];
int age = 1;//在c++中,结构体定义时部分成员变量可以赋初始值(为了和C语言统一,还是别用这种写法了,结构体声明中不要做任何赋值操作)
//c++可以在结构体内定义函数,C语言不可以
int getage(){
return age;
}
int r;
//int s = r*r;   不要做这种危险的定义,因为当定义Teacher变量的时候,便会进行r*r的运算,此时r可能还没有赋值
//此时的s就是个脏数据,如果后来你需要使用s,此时s不会再次进行r*r的运算,导致你永远取不到正确的s的值
//最好的办法写一个函数
int gets(){
return r*r;
}

};

void main(){
//在c++定义结构体,可以使用struct关键字,也可以不使用
Teacher t2;
struct Teacher t1;
printf("age=%d\n", t1.age);
system("pause");
}


//区别④:struct类型的加强(C语言版本)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型
struct Teacher{
char name[20];
//int age=1;  报错:在C语言结构体定义中,不可以赋初始值,
int age;
//C语言的结构体里不可以定义函数
/*int getage(){
return age;
}*/
};

void main(){
//Teacher t1;  在C语言中 ,定义结构体必须使用struct 关键字,因为C编译器并不认为结构体是一种新的类型
struct Teacher t1;
system("pause");
}


//区别⑤:函数,变量类型加强(C++版本)
#include<iostream>
using namespace std;

//C++中所有的变量和函数都必须有类型
//C语言中的默认类型在C++中是不合法的
//f(i){
//    printf("i=%d\n", i);
//}

int go(){
printf("");
//错误    1    error C4716 : “go” : 必须返回一个值
//在c++中,函数定义了返回值类型,那么必须返回对应类型的值,不然会报错
return 5;
}

//小结:
//在C++中,int f(); 和int f(void)具有相同的意义,都表示返回值为int的无参函数
//C++更加强调类型,任意的程序元素都必须显示指明类型

void main(){
system("pause");
}


//区别⑤:函数,变量类型加强(C语言版本)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//C语言中,函数的形参可以不设置类型,返回值也可以不设置类型
f(i){
printf("i=%d\n",i);
}

int go(){
printf("");
//警告 warning C4716: “go”: 必须返回一个值
//在c中,函数定义了返回值类型,可以不返回对应类型的值,只是编译器会提出警告
}

//小结:
//在C语言中,int f();表示返回值为int,接受任意参数的函数
//int f(void);表示返回值为int的无参函数

void main(){
//C语言中,从语言编译器并不限制函数f可以接受多少个参数?
f(1, 2, 3, 4, 5);
system("pause");
}


//区别⑥:bool类型(C++版本)
#include<iostream>
using namespace std;

void main(){
bool b = true;
printf("bool类型的大小是%d个字节\n",sizeof(bool));
//bool类型占1个字节小大的内存空间
b = 4; //  类型隐式转换   warning C4305: “=”: 从“int”到“bool”截断
printf("b=%d\n",b);//打印 1
b = 0;
printf("b=%d\n", b);//打印 0
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: