day01--C到C++的过度

命名空间

using namespace std;//标准命名空间

namespace A
{
    int a = 1;
    void print()
    {
        cout << "namespace A" << endl;
    }
}

namespace B
{
    int a = 2;
    void print()
    {
        cout << "namespace B" << endl;
    }
}
namespace C
{
    namespace D
    {
        struct test
        {
            int a;
        };
    }
}

int main()
{
    using namespace A; //优先级较低
    cout << " a =" << a << endl; //1
    cout << " a =" << B::a << endl; //2

    using B::a; //优先级较高
    cout << " a =" << a << endl;//2

    print();//namespace A

    C::D::test t;//嵌套命名空间
}

cout ———-> 对象
<< ———-> 重定向。重载
:: ———-> 作用域限定符

register 寄存器变量

在C中:
不能被取地址
在C++中:
出现register int a; &a;
a不再是寄存器变量而是普通变量

全局变量

未初始化的全局变量是0
未初始化的局部变量是垃圾值

int a;
int a = 1

在c中:
重复定义多个全局变量是合法的,都会被链接到全局数据区的同一个地址空间
在C++中:
不允许重复定义同一个全局变量

struct

类型加强 可以作为一个数据类型
在C++中, struct和class基本一样,不过class的权限是私有的

函数返回值与形参

print()
{
}

C:
返回值void可以省略。可以接受任意个参数
形参有void和没有void不一样
C++:
函数必须有返回值类型。
形参有没有void都一样

bool

bool a = ture; //值非0即1;

三目运算符


int a = 1, b = 2;
int c = (a > b)? a: b;
*((a > b)? &a : &b) = 10;

C中:三目运算符不能做为左值,结果是常量

(a > b)? a: b = 10;
C++中:条件表达式可以作为左值,返回值是变量

const

C:
只读变量,不能直接修改
C++:

const int a = 1;

a 就是常量,存在于符号表里,不占用内存

int *p = (int *)&a;

操作系统会分配4个字节的内存,内存里存放的是1

扫描二维码关注公众号,回复: 2325589 查看本文章
*p = 3;
cout << p << "," << a << endl;

3 ,1
a是常量,用1来替换

const与#define区别

作用域不一样

void print()
{
    const int a = 1;//局部变量,函数内部有效
    #define b 1     //宏,这行向下有效,直到遇见#undef
}

就近原则

const int *p;

p只的内存不能改,即不能*p++

int *const p

p不能改,常指针,即不能p++

const int *const p;

都不能改

引用

定义引用的时候,一定要初始化
不能返回局部变量的引用
引用在C++内部是一个常指针
C里的数组也是一个常指针
当使用引用语法的时候,不去关心编译器怎么做
出现奇怪现象的时候才考虑C++编译器怎么做

struct test //声明
{
    char &a;//引用就是常指针,指针都是4个字节
    char &b;
};
int &a = 1;//不能用常量初始化引用

const int &b = 1//用常量初始化常引用
int *p = (int *)&b;
//b++; 常引用不能被修改
(*p)++;
cout << b << endl;//2

int a = 1;
const int &c = a;//用变亮初始化常引用
//c++;
a++;
cout << a << endl;//2

默认参数

一旦使用的默认参数,后面必须使用默认参数

int add(int a, int b, int c = 3, int d = 0)//默认参数,占用参数
{
    return a + b + c;
}

重载函数

构成重载的条件:
1、参数个数不同
2、参数类型不同
3、参数顺序不同

返回值不同不能构成重载

猜你喜欢

转载自blog.csdn.net/wed312/article/details/81110581