慕课学习C++笔记02-封装(上)

来源:互联网 发布:有个腿长的女朋友知乎 编辑:程序博客网 时间:2024/05/01 02:58

http://www.imooc.com/learn/382


问:如何判断字符串name,输入为回车键?

答:使用getline()来

    getline(cin,name);    if(name.empty()){        cout<<"输入为空"<<endl;        return 0;    }


问:C++中类的成员变量默认是私有还是共有?

答:sturct默认是公有的,class默认是私有的。


问:如何设置一个类的成员变量name为只读?

答:把该成员变量name设置为private,使用public的getName()方法,不写setName()方法就可以了。


问:类内定义与内联函数关系?类外定义?

答:编译器会自动将类内定义的函数优先为内联函数inline, 书写时不需要加inline。

类外定义,类内声明,类外void Student::getName(){ //函数体}。

分文件类外定义,在头文件里Student.h里声明类,在Student.cpp里添#include“Student.h”(""是搜索所有目录,<>是搜索当前目录),接着写void Student::getName(){ //函数体}。


问:内存分区?

答:栈区:内存由系统分配,无论是分配还是回收,都不需要程序员关心;

堆区:内存需要程序员关心管理的。



问:构造函数?

答:为了避免程序员忘记初始化或是重复初始化,引入了构造函数,它是在对象实例化被自动调用,被调用且只有一次。构造函数与类名同名,没有返回(连void都不用),可以重载。


问:初始化列表特性?
答:初始化列表先与构造函数体内执行;初始化列表只能用在构造函数;初始化列表可以同时初始化多个成员变量。

构造函数执行分为两个步骤:初始化阶段(所有类类型的成员变量都会在初始化阶段初始化),计算阶段(执行构造函数体内的赋值操作)。

使用初始化列表主要基于性能问题,少了一次调用默认构造函数的过程,对于数据密集型的类来说非常高效。

http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html

以下情况必须使用初始化列表:常量成员,因为常量只能初始化不能赋值;引用类型,引用必须在定义的时候初始化,并且不能修改引用的对象(不是不能赋值,而是不能修改

引用的对象,比如这里x是y的引用,就一直是y的引用不会变化,对引用赋值就是对它引用的对象赋值,比如这里x=7和y=7是一个意思。);没有默认构造函数的类类型,因为使

用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。


问:拷贝构造函数?

答:拷贝构造函数:Student(const Student &stu{...}

拷贝构造函数的参数是确定的,不能重载 。

如果没有自定义的拷贝构造函数,系统会自动生成一个默认的拷贝函数;当采用直接初始化或是复制初始化实例对象时,系统自动给调用拷贝构造函数。


问:析构函数?

答:对象销毁时会自动调用,回收资源,收拾最后残局。

格式:~类名(){...}

没有返回值,没有参数,不能重载


问:对象的生命历程?

答:


0 0
原创粉丝点击