C++学习day1之C++与C基础比较

/*
 *
 *这里主要说明C和C++类型增强的程序
 *
 */
#include<stdio.h>
#include<stdlib.h>

int main()
{
    /***C语言 const int a; 不赋初始值
     * 如果你这样定义,只是你后面不能给他赋值,不代表编译不过去,
     * 但是C++不行,C++编译都通不过去
     * 还有一个问题就是你C语言可以通过取它的地址来改变这个值,但是C++不行
     * 原因:你定义一个int *p=&a;这里其实是强制类型转换了一波
     * 相当于int *p=& const int , const int *p,强行将const int *转换为 int *
     *C里面只会报警告,能编译过去,而且还能改变这个值
     *但是C++是编译都编译不过去
     *而且还有malloc malloc你不强制类型转换打话,是个void *,C++也是不能编译过去,需要在前面强制类型转换类型。其实说白了就是C++不喜欢隐式强制类型转     *换
     */
/*
#ifdef i
    const int a=100;
    int *p=(int *)&a;
    *p=100;
    printf("a = %d \n",a);
    return 0;
#endif
    int *q=(int *)malloc(100);
    return 0;
*/
    /*
     *增加了一个bool类型
     *C语言中的逻辑真假用0和非0表示,而C++中有了具体的类型
     */

    bool flag= true;

    if(flag)
    {
        printf("true\n");
    }
    return 0;
        
}



/*
 *
 *  用来说明枚举的不同
 *
 */
/*
 *1,C++里面对变量的声明是不同的
 *比如下面的struct student,在C++中可以用 student来定义一个struct student类型
 *的变量,但是在C语言里面不行,enum类型一样的。
 *而且这里注意的是,这里只能选枚举里面的内容,你赋值0 100什么都会报错
 *但是C不会,C还会输出出去。
 *而且枚举还有一个不好的地方
 *你enum{Mon,Tue,Wed,Thu,Fri,Sat,Sun};
 *这里相当于#define Mon 0 
 *在C里面表达式是不能做为左值的,但是在C++里面是可以的,
 *比如int a,b=10;
 *(a=b)=100是可以的,C++里面这里就等于先把b的值赋值给a,然后在把100赋值给a
 *但是C里面会报错,这其实是一个运算符重载的问题
 */


#include<iostream>
enum Day{
    Mon,Tue,Wed,Thu,Fri,Sat,Sun
};
struct student{
    char name[9];
    int num;
};
int main()
{
    student stu;
    int a,b=10;
    (a=b)=100;
    Day da;
   // da=0;
    da=Tue;
    printf("da= %d\n",da);
    printf("a = %d b=%d\n",a,b);
    //printf("helloworld\n");
    return 0;

}
/*
 *
 *C++中的输入和输出
 *cin 和cout其实就是类对象
 * 跟scanf和printf其实是一样的功能,只是一个是函数,一个是对象
 */

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

int main()
{
    //char name[30];
    /*
     *
     *这里cin>>a>>b;就相当于cin>>a,cin>>b;
     *这里的cout同理
     *这里的endl就等于end line相当于C语言的\n
     *C语言中的printf拥有强大的格式化控制,C++亦可以实现
     *但是略复杂
     */
    //cin>>a>>b;
    //cout<<a<<endl<<b<<endl;
    //cin>>name; //>>这个流输入运算符
    //cout<<name<<endl;
    /*
     *在C语言中,假设你定义一个a=12345,然后再来一个float b=1234.567;
     *%8d这个时候会出现一个什么样现象,占8个字符,然后左边空三个
     *你就可以用printf("%8d\n",a);
     *如果是prinf("%-8d--",a); 占8个字符,但是-8表示像左对齐,所以输出的话是
     *12345   --,后面会空3个空格
     *这里%.2f表示输出小数点后两位,printf("%.2f\n",b)的时候 这里四舍五入,输出的结果是1234.57,默认是输出6位小数。 
     */
     int a=12345;
     float b=1234.567;
     //printf("%-8d---\n",a);
     //printf("")
     //printf("%f\n",b);
    /*
     *如果我们用C++里面的cout怎么输出
     *cout<<a<<endln就行了
     *注意这里如果加了引号和双引号
     *那就会输出字符a
     *那我现在要实现一个东西,我要让你怎么办呢,我要让你输出一个宽度的问题
     *setw就是设置输出宽度,默认为右对齐,跟上面不一样,如果你想要左对齐的话就-8是不可以的,如果是-8就是放了一个很大的数字,正确的话应该是setiosflags(ios::left),输出cout<<setiosflags(ios::left);
     *还要加头文件#include<iomanip>
     *C++中的头文件有个特点,没有.h这个概念,
     */
     //cout<<setiosflags(ios::left)<<setw(-8)<<b<<endl;
     //然后我们输出float型的数据,假设我们直接调用
     //cout<<b<<endl;
     //这里输出1234.57,这里是6个有效数字,默认6个有效数字
     //setprecision(2)可以设置有效位数,setprecision(n)<<setiosflags(ios::fixed)合用,可以设置小数点右边的数字
     //cout<<setw(10)<<setprecision(5)<<setiosflags(ios::fixed)<<b<<endl;
     
     //C里面printf("%x\n",a);但是C++里面要输出的话就用cout<<hex<<a<<endl;
     //cout<<hex<<a<<endl;
     //
     //如果你左对齐和右对齐的时候如果位数不够的话C中不能填充特定的字符
     //但是C++可以
     cout<<setfill('x')<<setw(10)<<a<<endl;
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值