C++ c++与C语言的区别第二讲

Posted 庖丁解牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ c++与C语言的区别第二讲相关的知识,希望对你有一定的参考价值。

//区别④: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语言不可以
    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");
}

 

//区别⑤:struct类型的加强(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");
}
//区别⑤:struct类型的加强(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");
}

 

以上是关于C++ c++与C语言的区别第二讲的主要内容,如果未能解决你的问题,请参考以下文章

c++中后缀名.c 与.cpp的区别

c语言和c++有啥关系

c语言和c++和c#的区别

C++标准库 STL -- 容器源码探索

C语言和C++有啥区别?

C++ c++与C语言的区别第三讲