实际上是做题时遇到的一点疑惑
1. 关于 this 指针:(选 B)
A. 构造函数用于初始化对象,在构造函数中可以使用 this
指针来区分成员变量和局部变量,或者通过 this
指针调用其他成员函数等。例如:
class MyClass { | |
public: | |
int num; | |
MyClass(int num) { | |
this->num = num; // 用于区分时必须明写 this | |
} | |
}; |
B. 此时 this
指针是一个指向常量对象的指针,即 const
类型的指针,不能指向可以被修改的对象
class MyClass {
public:
int num;
void printNum() const {
// this 指针指向常量对象
const MyClass* constThis = this;
// 可以使用 this 指针访问成员变量,但不能修改
std::cout << this->num << std::endl;
}
};
/*在实际使用中,const类型的成员函数依然可以使用this来指向调用它的对象,也可以访问其内容*/
C,D 都是正确的
2. 关于构造 / 析构函数的执行
不放题目就说一下:
构造函数
默认就有普通构造函数和复制构造函数(是浅拷贝,仅仅赋值),它们是重载的
但是,如果自己写了任意一种的构造函数,就不会在默认生成
可以使用
MyClass() = default
来显式指定生成默认的构造函数
另外,const 可以作为构造函数的重载区分,当定义的对象是 const 类型,它才会被自动调用。
析构函数
没有参数,不可重载,都是先入后出(同生存期时,包括对象数组),这是因为后面定义的对象析构时可能访问已销毁的前面的对象,所以这是 C++ 的标准要求的,跟怎么存储没有关系。
3. 关于成员函数 & const&static
常成员函数:
属于对象,不能通过 this
指针修改调用对象的非常数据成员 ,但是可以使用外部的数据 / 函数
并且可以修改外部数据(除 const 的数据),被调用外部函数也可以修改对象的非常数据成员
稍微复杂一点:
#include <iostream>
class AnotherClass {
public:
void nonConstFunction() {
std::cout << "Non-const function of AnotherClass." << std::endl;
}
void constFunction() const {
std::cout << "Const function of AnotherClass." << std::endl;
}
};
class MyClass {
public:
void constFunction(const AnotherClass& anotherObj, AnotherClass& nonConstAnotherObj) const {
// 可以调用 const 对象的 const 成员函数
anotherObj.constFunction();
// 以下代码会报错,不能调用 const 对象的非 const 成员函数
// anotherObj.nonConstFunction();
// 可以调用非 const 对象的非 const 成员函数
nonConstAnotherObj.nonConstFunction();
}
};
int main() {
AnotherClass obj1;
const AnotherClass obj2;
MyClass myObj;
myObj.constFunction(obj2, obj1);
return 0;
}
//其实也不复杂,就是说如果用了其他对象,那么能否调用其中的函数,看那个对象本身是否可以调用
//但是话又说回来,如果那个对象的方法改变了本来这个对象的非const成员函数,依然是会报错的
//同理,被调用的对象不能调用调用对象的非const成员函数
总之就是:不能改变/使用本身对象里的非const成员(除被声明为mutable的成员数据),其他随意。
静态成员函数:
属于类,也可以通过对象调用,但是没有区别,只能使用静态成员数据 / 函数和外部数据 / 函数
提一下:
1. 静态成员数据不是在构造函数中初始化的(但是构造函数可以使用它),必须在类外以 类名::变量名=xxx
的形式初始化,不过,如果它同时是 const 的话,甚至可以直接在类内就定义(也可以不)
2. 常数据成员只能在构造函数的初始化列表中定义(除了上面那个情况),不能在函数本身或者外部
总之就是:static 类型的属于类本身,但是 const 属于对象,只有同时是 static 和 const 才能类内定义