美文网首页
C++ 语言类中各个重要函数原理

C++ 语言类中各个重要函数原理

作者: Dalvik_ | 来源:发表于2021-03-14 20:05 被阅读0次

    1.命名空间的自定义及使用

    • 全局使用及局部使用。
    #include <iostream>
    using namespace std;
    //定义命名空间
    namespace name1 {
        char *str = (char *) "hello world";
    }
    namespace name2 {
        void show() {
            cout << "name2 to show" << endl;
        }
    }
    //全局引入自定义命名空间
    using namespace name1;
    
    int main() {
        cout << str << endl;
    
        //局部引用命名空间
        using namespace name2;
        show();
        return 0;
    }
    
    
    • 命名空间变量及函数重复的使用方式
    #include <iostream>
    
    using namespace std;
    //定义命名空间
    namespace name1 {
        void show() {
            cout << "name1 to show" << endl;
        }
    }
    namespace name2 {
        void show() {
            cout << "name2 to show" << endl;
        }
    }
    //全局引入自定义命名空间
    using namespace name1;
    using namespace name2;
    
    int main() {
        //只能通过命名空间的名称使用
        name1::show();
        name2::show();
        return 0;
    }
    
    • 命名空间嵌套
    #include <iostream>
    
    using namespace std;
    //定义命名空间
    namespace name1 {
        void show() {
            cout << "name1 to show" << endl;
        }
    
        namespace name2 {
            namespace name3 {
                void show() {
                    cout << "name3 to show" << endl;
                }
            }
        }
    }
    
    int main() {
        //只能通过命名空间的名称使用
        name1::show();
        name1::name2::name3::show();
        return 0;
    }
    
    

    2.构造函数详解

    • 构造函数 跟java一样的
    //参数赋值两种写法 1this->name=name; 2 name(name);
    // :name(name) 等价 this->name = name;
        /*Student(char * name) :name(name) {
            cout << "一个参数的构造函数" << endl;
        }*/
    Student::Student() {
        cout << "无参构造函数" << endl;
    }
    
    Student::Student(char *name) : Student(name, 121) {
        this->name = name;
        cout << "一个参数构造函数" << endl;
    }
    
    Student::Student(char *name, int age) {
        this->name = name;
        this->age = age;
        cout << "两个参数构造函数" << endl;
    }
    
    
    • 在栈区开辟
    int main() {
        //Student stu; 默认调用空参数构造函数
        Student stu1;
        cout << "---------" << endl;
        // 构造函数继承 先调用父构造 再调用子构造
        Student stu3("刘老汉");
        cout << "---------" << endl;
        Student stu4("大眼怪", 99);
        return 0;
    }
    输出:
    无参构造函数
    ---------
    两个参数构造函数
    一个参数构造函数
    ---------
    两个参数构造函数
    
    • 使用new Student 在堆区开辟 需要delete
    int main() {
        Student *stu1 = new Student("二哈");
        cout << stu1->getName() << "  " << stu1->getAge() << endl;
        delete stu1;
        stu1 = NULL;
        //Student student = new Student(); //直接编译报错
        return 0;
    

    3.析构函数

    • 析构函数定义 对象被回收的时候调用的析构函数
    public:
        Student();
    
        Student(char *);
    
        Student(char *, int);
    
        ~Student();//析构函数申明
    };
    // 析构函数实现
    Student::~Student() {
        cout << "析构函数" << endl;
    }
    int main() {
        Student *stu1 = new Student("二哈");
        cout << stu1->getName() << "  " << stu1->getAge() << endl;
        delete stu1;
        stu1 = NULL;
        return 0;
    }
    
    输出:
    两个参数构造函数
    一个参数构造函数
    二哈  121
    析构函数
    
    • 析构函数作用
      在析构函数中释放 动态开辟的成员变量空间

    4.new delete

    • new /delete 会调用构造函数 与析构函数 (C++范畴)
    • malloc / free 不会调用构造函数与析构函数 (C的范畴)

    5.拷贝构造函数

    • 对象 = 赋值。会调用拷贝构造函数
    int main() {
        Student *student = new Student();
        
        notify(*student);
        
        delete student;
        student = NULL;
        return 0;
    }
    输出:
    无参构造函数
    拷贝构造函数
    析构函数
    析构函数
    
    • 拷贝构造函数重写
    Student::Student(const Student &student) {
        cout << "拷贝构造函数" << endl;
    }
    

    6 指针常量 常量指针 常量指针常量
    int num=9;
    int num2=8;

    • 常量指针 不允许直接修改值 可以修改指针
    const int * p=&num;
    
    • 指针常量 允许直接修改值 不可以修改指针
    int *  const  numP=&num
    
    • 常量指针常量 指针和值都不允许修改
    const int* const numP=&num;
    

    相关文章

      网友评论

          本文标题:C++ 语言类中各个重要函数原理

          本文链接:https://www.haomeiwen.com/subject/bepoqltx.html