C向C++的知识过渡

  1. 关于C++默认代码与C的一些不同的认识

#include <iostream>
//#include 头文件 :C++标准库中的头文件都不带.h  
#include <cstdio>
#include <cstring>

using namespace std; 

int main(int argc, char** argv) {
    
    cout << "Hello World!" <<endl;
    // <<是一个运算符重载函数operator << (形参列表) 
    // cout << 相当于cout.operator<<(实参),相当于C库函数printf
    
    //C库的输入函数:scanf
    //在C++中的输入函数 cin >> 相当于scanf
    //在C++中表示字符串有了专门的类型:string类型 
    //在C中字符串没有类型,只有表现形式:字符指针,字符数组。需注意容量及尾部\0的问题 
    
    string name;
    cin >> name;
    cout << name << endl;    //endl相当于一个\n 
    
    return 0;
}

  1. 命名空间

  • 利用关键字namespace去定义自己的名字空间

namespace + 名字空间标识符
{
    //在自定义的命名空间中定义自己的变量或函数或类
}

所有的名字空间就是在全局空间中定义的,相当于是在全局空间中又定义一个不同名字的全局作用域。

  • 如何访问不同命名空间中的变量或函数呢?

使用 域名访问符:: 来访问指定空间中的变量或函数名或类。

#include <iostream>
//#include 头文件 :C++标准库中的头文件都不带.h  
#include <cstdio>
#include <cstring>

using namespace std; 

namespace A
{
    int a = 100;
    void show()
    {
        cout << "加油!!!" << endl; 
    }
    
} 

namespace B
{
    int a = 500;
    void show()
    {
        cout << "欢迎大家来到华清远见学习" << endl; 
    }
}

//嵌套的名字空间
namespace C
{
    namespace D
    {
        int a = 2000;
        void show(){
            cout << "nihao" << endl;
        } 
     } 
 } 

int main(int argc, char** argv) {
    //访问命名空间中变量的方式:    名字空间名 + :: 
    //指定访问某个名字空间中的变量或函数 
    cout << A::a <<endl;
    cout << B::a <<endl;
    A::show();
    B::show(); 
    //对于嵌套的名字空间,使用::逐级访问 
    cout << C::D::a <<endl; 
    C::D::show(); 
    
    return 0;
}
  • using关键字:导入标识符

  1. 导入具体的标识符:

使用using + 名字空间名 + 具体的哪个变量或函数或类的名字标识符。

using A::a;
cout << a << endl;
  1. 导入名字空间中的所有标识符:using + namespace + 哪个名字空间

  1. C++中的struct结构体与字符串

  • C++中的结构体与C中结构体的区别:

C中使用结构体:不可以直接在结构体内部定义函数,只能通过函数指针的方式间接调用一个全局函数的形式来表示。

#include <stdio.h>

struct Stu
{
    char* name;
    int age;
    void (*pfun)();    
};

void write_code()
{
    printf("正在努力地写代码\n");
}  

int main() {
    
    struct Stu stu = {"zhangsan",20,write_code};
    printf("%s\n",stu.name);
    printf("%s\n",stu.age);
    //通过函数指针的回调调用一个全局函数来表示stu这个(结构体变量)对象的行为
    stu.pfun(); 
    
    return 0;
}

C++中的结构体:多了封装性,只不过默认采用的公有的访问权限public。

#include <iostream>

using namespace std;

struct Stu
{
public:    //公有访问权限 
    string name;
    int age;
//private:    //私有访问权限 
    //把定义在结构体内部的函数称为成员函数 
    void write_code()
    {
        printf("正在努力地写代码\n");
    }    
};

int main(int argc, char** argv) {
    
    Stu stu = {"zhangsan",20};
    
    cout << stu.name <<endl;
    cout << stu.age <<endl;  

    stu.write_code(); 
    
    return 0;
}

C++中的结构体大小与非静态属性有关,同时遵从C中的结构体对齐原则,与结构体中成员函数无关。因为C++中的类就是从C中的结构体衍生而来。

  • 认识C++中string类

C中是没有字符串类型,只有字符串的表示形式:1.字符指针;2.字符数组。

在C使用字符串要注意:字符长度和\0的问题。

在C++的面向对象这个世界中,对于底层数据元素操作,我们把这个底层操作封装起来,成为了专属性字符串类型。

string的API的使用:

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    
    string name1 = "zhugeliang";
    cout << name1 << endl;
    string name2 = "zhangsan";

    //at()接口
    cout << name2.at(2) << endl;
    //cout << name2.at(100) << endl;     //会报越界异常

    //size()接口
    cout << name2.size() << endl;//8

    //[]中括号运算符函数的重载
    cout << name2[1] << endl;//h
    //在使用string定义的字符串,当访问指定的字符时,我们更推荐使用at,因为at有边界检查 
    cout << name2[100] <<endl;
    
    cout << name1 + name2 << endl; 
    
    string str = name1 += name2;
    cout << str << "," << name1 << endl;
    
    //append()接口
    string str2 = name2.append(",nihao");
    cout << str2 << "|" << name2 << endl;
    
    return 0;
}
  1. C++中bool变量,&取址符,const修饰符

  • C++中的bool变量

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    
    //定义一个布尔变量,在C中以0为假,非0为真,即使是个负数也是为真 
    //在C++中我们表示布尔有了专门的一个布尔类型,内置类型,用bool表示。
    bool ok;
    ok = true;
    cout << ok << endl;        //1为真 
    ok = false;
    cout << ok << endl;        //0为假 
    
    cout << sizeof(bool) << "B(字节)" << endl;    //1B 
     
    return 0;
}
  • &取址符回顾与拓展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值