c++ 学习之路 第一天 C++类和对象,命名空间,标准库和std命名空间

一.类和对象的概念

类 :C++中的类是一种用户定义的类型,可以理解为C语言中的结构体的升级版。
对象 :C++中的类也是一种构造数据类型,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数;通过类定义出来的变量就叫做对象。下面给出一段示例代码:

#include<stdio.h>
int main(void){
    class Student{
        public:
            char *name;
            int age;
            float score;

        public:
            int printInfo(void){
                printf("%s age is:%d,score is %f",name,age,score);
            }
    };

    class Student stu1;
    stu1.name="kelvin";
    stu1.age=20;
    stu1.score=100.0;
    stu1.printInfo();
    return 1;
} 

这段代码中,class用于声明一个类,public表示该成员是共有的,“共有”是指这个类创建出的对象都可以访问该成员,与之相对就会有private,正与public相反。

C++中,通过类可以创建对象,类可以看做模板,通过模板可以生产出具有相同性质的产品,因此也将对象成为类的一个实例,这个过程称为类的实例化。

注意:类只是一个模板,起到指导的作用,不占用内存空间;对象才是具体的产品,要有地方来存放,才会占用内存空间。

类所包含的变量和函数也有了新的的称呼,变量被称为属性(通常也称成员变量),函数被称为方法;属性和方法统称为类的成员。

二.命名空间

C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为namespace。

一个较大的项目在开发过程中,会有很多人参与,不可避免地会出现变量,函数重名的情况。每个人的代码单独运行都没有问题,但合并在一起时就出现了问题,所以引入了namespace的概念。

//那么命名空间是如何解决问题的呢,我们来看这样一段code.
int  flag = 1;      //A声明的变量
// ……             //中间间隔若干行代码
bool flag = true;   //B声明的变量

每个人习惯不同,有人喜欢用0,1做逻辑判断,有人喜欢用布尔值。于是我们用namespace来解决冲突的问题。

namespace A{   //A的变量声明
    int flag = 1;
}
namespace B{   //B的变量声明
    bool flag = true;
}

A和B分别用姓名来指定各自的命名空间,这样两个flag变量再放进同一个函数体里就不会有冲突。当然得说明是哪个namespace里的flag。于是,为了说明变量属于哪个namespace,有了 域解析操作符 ::

A::flag = 0;        //使用A定义的变量flag
B::flag = false;   //使用B定义的变量flag

除了直接使用域解析操作符,还可以使用 using 关键字

using A::flag;
flag = 0;  //使用A定义的变量flag
B::flag = false;  //使用B定义的变量flag

代码开头用using声明使用A定义的flag,表示之后的代码在未指定namespace时都使用A定义的flag,但要使用B定义的flag时,还是要用 :: 来指定namespace。

命名空间内部不仅可以声明或定义变量,对于其它能在命名空间以外声明或定义的实体,同样也都能在命名空间内部进行声明或定义,例如类的声明或定义、函数的声明或定义、typedef等都可以出现在命名空间中。

给出namespace示例代码如下:

#include<stdio.h>
namespace kelvin{
    class Student{
        public:
            char *name;
            int age;
            float score;

        public:
            int printInfo(void){
                printf("%s age is:%d,score is %f",name,age,score);
            }
    };
} 

int main(void){
    using namespace kelvin;
    class Student stu1;
    stu1.name="kelvin";
    stu1.age=20;
    stu1.score=100.0;
    stu1.printInfo();
    return 1;
}

三.C++标准库和std命名空间

使用C++标准头文件

前面我们使用了C语言的格式输出函数 printf,引入了头文件 stdio.h,这完全没有错误,因为C++兼容C。但在C++代码中我还是推荐使用C++的头文件,不要把C和C++代码混合在一起使用。

如果你希望使用 printf 函数,那么应该引入 ,并使用命名空间 std,如下所示:

#include <cstdio>
using namespace std;

通过两个函数和解析,命名空间就能理解清晰**
使用std这个名字空间。标准库里面的东西都是处于std名字空间的。

解析程序一:

#include <iostream>
using namespace std;

namespace class1{
    int zhangsan=100;
    namespace group1{
        int lisi =500;
    };
};
namespace class2{
    int zhangsan=200;
};
//命名空间就是一个作用域
//包括一个类、函数、语句块都是一个作用域,典型语法符号就是指{};
using namespace class1;
using namespace class2;

int zhangsan =300;

int main()
{
    cout<<"Hello world!"<<endl;
    //::,域访问符,指的是前面的作用域内取访问某些变量或符号
    cout<<"class1::zhangsan="<<class1::zhangsan<<endl;
    cout<<"class2::zhangsan="<<class2::zhangsan<<endl;
    cout<<"::zhangsan="<<::zhangsan<<endl;
    cout<<"class1::group1::lisi="<<class1::group1::lisi<<endl;
    return 0;
}

**using namespace std;
如果不写这句,
你写cin和cout时候就必须这样写,否则找不到cin或者cout。
std::cin>>a;
std::cout << a << std::endl;
//

解析程序二:

#include <iostream>
using namespace std;

namespace class1{
    int zhangsan=100;
    namespace group1{
        int lisi =500;
    };
};
#if 0
namespace class2{
    int zhangsan=200;
};
#endif
//命名空间就是一个作用域
//包括一个类、函数、语句块都是一个作用域,典型语法符号就是指{};
//using namespace class1;
using namespace class1::group1;

//int zhangsan =300;

int main()
{
    cout<<"Hello world!"<<endl;
    //::,域访问符,指的是前面的作用域内取访问某些变量或符号
//  cout<<"zhangsan="<<zhangsan<<endl;
    cout<<"lisi="<<lisi<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值