让我们看看这个简单的代码示例,包括一个基类和一个派生自Base的类,它需要在其构造函数中使用基类成员的地址.
#include <vector>
#include <inttypes.h>
#include <stdio.h>
class Base
{
protected:
std::vector<uint32_t> arr;
public:
Base(std::vector<uint32_t> arr_in): arr(arr_in) {}
};
class Derived: public Base
{
private:
uint32_t *parr;
public:
Derived(std::vector<uint32_t> arr_in): Base(arr_in)
{
parr = &arr[0];
}
uint32_t *get_parr();
};
uint32_t *Derived::get_parr(void)
{
return parr;
}
int main()
{
std::vector<uint32_t> myarr(3, 1);
Derived myderived(myarr);
printf("myderived.myarr adress = %p", myderived.get_parr());
}
Run Code Online (Sandbox Code Playgroud)
由于派生类的构造函数首先调用基类构造函数,然后才执行其代码块,因此可以访问基类的成员.所以一切正常.
现在我更改代码示例,以便我的两个类是模板.
#include <vector>
#include <inttypes.h>
#include <stdio.h>
template<typename T>
class Base
{
protected:
std::vector<T> arr;
public:
Base(std::vector<T> arr_in): arr(arr_in) {} …Run Code Online (Sandbox Code Playgroud)