C++基础语法

目录

名字空间

 导入

C与C++结构体对比

字符串 string

布尔变量 bool

成员函数指针

内联 inline

函数重载

const修饰符

引用 &

常引用


名字空间

        namespace + 名字空间标识符

        意义:为了程序大型化以后所有可能出现命名冲突的问题 。

 

 导入

         指定导入

                using + 作用域标识符 : :  指定的变量、函数、类名

        全部导入

                using + namespace + 作用域标识符 

                         作用域中的所有的变量、函数、类标识符全部导入到当前文件中。

                        表示从此行开始,所有的变量名用该作用域的变量。

        域名访问符 (作用域访问符) : : 

                作用域嵌套时,可用 : : 逐级访问。

                指出作用域的范围。

C与C++结构体对比

        C中

                结构体没有封装性,结构体中不可以直接定义函数,只能通过函数指针的方式进行回调。

        C++中

                结构体具有封装性,默认访问权限是公有的。

                class也是由struct衍生而来的。

                class访问权限默认为private私有的,而struct访问权限默认是公有的public。

                struct结构体在定义对象时无需再struct修饰一次了。

                struct结构中的函数,就叫成员函数。

                非静态成员函数可以直接调用结构中的变量。

                非静态成员函数形参列表中有一个隐藏的this指针,所以可以调用类中的成员属性。

字符串 string

                name1 += name2

                name1 + name2

                name3 = name1 + name2

布尔变量 bool

                实际是unsigned char 无符号字符整形,占一个字节,只有两个值。

                bool a;

                a = true;

                a = false;

成员函数指针

  成员函数指针定义的方式                 获取成员函数指针的方式

返回值  (作用域 : : * 指针变量 )  =  &  作用域 : : 成员函数名
typedef void (*Pfun)();
struct Stu
{
    string name;
    int age;
    void showInfo()
    {
        cout << "姓名:" << name << ",年龄:" << age << endl;
    }
};
int main()
{
    void (Stu::*pfunc)() = &Stu::showInfo;
    (stu.*pfunc)();
}

内联 inline

inline + 返回值 函数名(形参列表)
{
    //内联函数体...
}
默认情况下,inline关键字是放在函数的定义处。

        内联的作用类似于宏的展开,把函数体直接再调用处展开。

        内联函数inline关键字只是一个建议作用,是否进行内联,要看具体函数代码是否精简。

        如果代码逻辑复杂,或者有循环,耗时操作,递归,将自动停止内联。

        内联的代价:因为会在内嵌在主函数的函数调用处展开,所以会导致最终可执行程序的代码膨胀问题。

函数重载

        语法:当同一作用域下,如果有多个同名函数,且这些同名函数的行参列表中的参数类型,个数,顺序不同,他们之间形成重载关系。

        与返回值是没有关系。

        函数重载给我们带来好处:函数调用的灵活性,是一种静态多态。多态:函数的不同实现。

        

        因为函数形参入栈的顺序是从右往左依次入栈的,

        所以C++中冠以函数参数默认的赋值规则是:从右往左一次赋默认值,不可以跳跃。

        

        同时,如果用分文件编程时:函数默认参数赋值可以只写在声明处,定义处无需再次进行赋值 。

        当函数参数默认值与函数重载发生冲突时,一定注意函数调用的参数个数(避免两者之中的冲突时,择优而选)。

        C++作用域:

                全局作用域,局部作用域,命名空间作用域,类作用域(结构体作用域)。

const修饰符

        C中

                const 修饰的变量被称之为只读变量。

        C++中

                const修饰变量,如果承接是一个立即数,那么编译器会对其进程优化,优化成一个常量,如 int a = 200;

                这个变量的标识符,也别称为符号常量。

        volatile

const int volatile a = 100;   //结果500
const int a = 100;                   //结果100

int* p = (int*)&a;
*p = 500;
cout << a << endl;

                原因:编译器打印时,是从寄存器上取值,是编译器的优化,效率更高。

                      但更改内存中的值,寄存器并未改变。

                       volatile的作用是告诉编译器,从内存中取值。

引用 &

类型& 引用变量 = 变量

        引用并没有开辟新的空间,而是已存在空间变量的别名。

        所以他的作用在于函数传参及函数返回值时,可以避免值的拷贝。

 

        1:从编译器角度来讲:

            1.1:引用就是一种升级版的指针。

        2:从语法形式来讲:

            2.1:引用是引用的是已经存在一块合法的空间。

            2.2:引用变量即是引用空间的变量的别名!!!

            2.3:指针可以是一个野指针,他可以指向任何的地方。如果在C++中单纯使用指针,内存很容易被写飞。

            2.4:指针可以进行无限次的赋值。

            2.5:引用只可以被引用一次。

 

        函数返回值为引用时,不仅可以避免值的拷贝,还可以做为左值使用:

        左值:有地址的量就叫左值。

        右值:没有地址的量叫右值,

        常量:是一个右值,但常量字符串是左值。

常引用

int& b = 10;  //错误
不能引用右值
const int& b = 10;  //可以
const修饰的引用,也叫常引用,常引用是不可进行修改的,保证了参数的值的安全。
常引用的底层实现:(以int类型举例)
const int& b = 10;
// int temp = 10; const int& b = temp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值