C++(十六) — 类中引用成员函数、命名空间的使用

1、为什么类中引用成员函数?

  类将属性和方法做了封装。类是一种数据类型,也就是:固定大小内存块的别名。

  类的定义是一个抽象的概念,定义时不分配内存,当用类定义对象时,才分配一个固定大小的内存块。

  此时,定义对象后,类内定义的变量就会执行一次初始化,但是主函数输出area时就是乱码,因为是直接去对应内存取值,而不是调用函数计算。

  下面例子就说明了,类内成员函数的作用。

class circle
{
public:
    double r;
    double pi = 3.14;
    // 定义一个对象后,初始化时已经执行了,当时r是一个随机值,所以结果:area内存中也是一个随机值
    double area = pi*r*r; 

    double getS(double r)
    {
        double ms = pi*r*r;
        return ms;
    }
};

int main()
{
    circle c1;
    cout << "Please input your r: " << endl;
    cin >> c1.r;

    // 执行此句话,只是从变量所标示的内存空间中拿值,并没有执行这句话。
    // 所以对 r 赋值, 对area没有任何影响,
    cout << c1.area << endl;        //乱码
    cout << c1.getS(c1.r) << endl;  //输出:正确的面积值

    system("pause");
    return 0;
}

 2、命名空间的使用

(1)当使用 #include <iostream> 时,必须和,using namespace std;一起使用。因为,该头文件没有定义全局命名空间,如果不想引用就需要:std::cout,指定命名空间;

(2)C++标准规定,头文件不用后缀 .h ,如果使用后缀,则调用的C得库。

(3)C++可以自己定义命名空间,而且可以嵌套命名空间。

#include <iostream>
using namespace std;

namespace namespaceA
{
    int a = 10;
}

namespace namespaceB
{
    int a = 20;
    namespace namespaceC
    {
        class Teacher
        {
        public:
            char name[20];
            int age;
        };
    }
}

void main()
{
    using namespace namespaceA;
    using namespace namespaceB;
    cout << namespaceA::a << endl;
    cout << namespaceB::a << endl;

    using namespaceB::namespaceC::Teacher;
    Teacher t1;
    t1.age = 30;
    cout << t1.age<<endl;
    system("pause");
}

 

posted @ 2018-12-15 21:53  深度机器学习  阅读(3525)  评论(0编辑  收藏  举报