- 输出运算符能否重载为类成员函数? 理解:输出运算符可重载为类的友元函数,在语法上可以重载为类的普通成员函数,但在输出类对象时,这不符合人的正常思维!
- 在class类中,private通常存放类的数据成员,而类成员函数通常存放在public中,并且通过public中成员函数方法来对私有数据成员进行初始化等操作,在类外不通过类对象来直接访问类私有数据,而是通过类对象调用类成员函数,对私有数据进行访问,这体现封装性。
- 类中static member function 和friend function的简单特性?类中一个常规成员函数声明描述三件在逻辑上互不相同的事情:① 该函数能访问类的私有部分;② 该函数位于类的作用域中;③ 该函数必须经由一个对象激活(有一个this指针)。--->而通过将函数声明为static,可以让它只有前两种性质;--->通过将函数声明为friend(友元)可以使它只具有第一种性质。
- class类数据成员在默认情况下是私有的,struct结构体数据成员默认公有。
- C++代码块中可以有空类和空结构体,而C语言中不允许,并且C没有类。
- 对class类的私有成员访问,通常采用公有的方法,比如利用构造函数初始化私有数据成员。
- 析构函数仅且只有一个,这与构造函数不同,构造函数可以重载;且析构函数无任何参数、无返回值类型。
- 在class类中,通常利用构造函数,以参数列表形式对私有数据成员进行初始化。
- 对象初始化对象,要调用拷贝构造函数,且该构造函数参数按对象的引用,不能按值传递。
- 赋值语句,调用赋值函数;对象初始化对象,调用拷贝构造函数。
- 初始化和赋值的关键性区别在于:是否对已存在对象进行操作?如下面:int a=10; // 初始化 int a; a=10; //赋值
- 类的静态成员不属于任何对象,为所有对象共享,其初始化在类外实现。class Test{static int data;}int Test::data=10;且调用格式:Test::data。
- 类的静态成员方法可以访问类的静态成员,不可以访问类的普通成员;类的普通方法,既可以访问类的私有普通数据成员,也可以访问静态成员。因为类的普通方法中存在this指针,而静态方法和静态数据成员不存在this指针。
- 思考:赋值语句为什么参数是按引用传递?赋值语句为什么是按引用传递的const?
返回自身对象时,什么时候应该按引用返回?按引用返回,能够节省时间和空间,但是不能按引用返回将要析构掉的临时变量。关键是:对象是否受到函数的限制,比如将要析构掉的临时对象,都被析构掉了,按引用返回肯定是随机值,程序异常!按引用返回,既节省了时间和空间,又不创建临时对象(它会调用拷贝构造函数)。
- 类方法 void fun(const Test &t) const; /* 第一个const限制Test类对象的引用不改变原有的对象,起保护作用,且按引用传递高效率节省空间;第二个const修饰的fun方法为常方法,它限制fun方法不能对类的数据成员进行任何修改,要修改数据就不能把方法设置成常方法*; /
因为a2是整型常量,其值不能被改变,而b2对a2进行引用,不是常引用,可能会造成a2值的改变,编译器不允许!a1,b1为整型常量。int a1 = 2; const int &b1 = a1;// right const int a2 = 2; &b2 = a2; // wrong const int a3 = 3; const &b2 = a2; // right
其中void list(); // void list( Test *const this ) | void list() const;// void list( const Test *const this)| 思考:为什么static void show()函数体中为什么data=x;和list();不正确?关键在于 static函数中没有this指针,而普通 函数存在。class Test { public: static void show(){ count = x; data = x; list(); } void list(){ show(); // yes cout<<"This is list()"<<endl; } void list() const{ cout << "This is list() const" << endl; } private: int data; static int count; }
C++学习笔记
最新推荐文章于 2024-06-18 22:30:11 发布