翻了好多地方,有人说在成员前面加this->可以解决,果然可以,但一直不明白原因,
代码:
#include <iostream>
#include <map>
#include <string>
#include <deque>
#include <vector>
using namespace std;
template <class T>
class b {
public:
b(){}
b(T i){
x.push_back(i);
}
void print(){
if(x.size()>0)
cout<<x[0]<<endl;
}
protected:
vector<T> x;
};
template <class T>
class e: public b<T>{
public:
e(T i):b<T>(i){
}
void print(){
if(this->x.size()>0)//这里要加this->或者b<T>::
cout<<this->x[0]<<endl;
}
};
int main()
{
e<int> a(1);
a.print();
}
在http://forum.ubuntu.org.cn/viewtopic.php?t=240044上有人解释了说是编译器偷懒的原因
分享到:
相关推荐
在这个“C++类和对象习题答案”中,我们可能看到关于类的设计、对象的创建、成员函数的使用、继承、多态等关键概念的练习和解答。 1. **类的定义与对象的创建** - 类定义:类通过`class`关键字创建,它包含数据...
在C++中,类的定义通常包含数据成员(或成员变量)和成员函数(或方法)。例如,`class CCompanyStaff`定义了一个名为`CCompanyStaff`的类,它有工作编号`m_iStaffNum`、姓名`m_cName`、出勤率`m_fRateOfAttend`和...
在C++中,公有继承(public inheritance)时,基类中的public成员在派生类中仍然是public的(A),而private成员在派生类中不可访问(B)。基类中的protected成员在派生类中仍然是protected(C)。私有继承(private...
16. 基类的静态成员(static members)和私有构造函数(private constructors)不能被派生类继承。 17. 类temp的复制构造函数的原型声明语句通常是 `temp(const temp &other);` 18. 设置友元函数的目的是为了使非...
类中可以定义成员变量和成员函数,成员变量用于存储数据,成员函数用于实现操作。 六、继承和多继承 在C++中,继承是一种机制,子类可以继承父类的成员变量和成员函数。多继承是一种特殊的继承方式,子类可以继承...
C++通过访问修饰符(public, private, protected)实现封装,其中public成员对外界可见,private成员只对类自身可见,protected则对子类可见。 4. **抽象类(Abstract Class)与纯虚函数**: 抽象类不能被实例化,...
1. **类(Class)**:类是C++中面向对象编程的基础,它定义了一组数据(成员变量)和操作这些数据的方法(成员函数)。通过创建类,程序员可以构建复杂的数据结构和抽象概念,使代码更易于理解和维护。 2. **封装...
- 继承类型:包括public、private和protected三种方式,它们定义了基类成员在派生类中的访问权限。 - 多态性:通过虚函数实现,允许派生类对象对基类指针或引用来进行操作时,执行派生类版本的方法。 3. C++特殊...
,那么通过Derived类的实例对象,无论如何也访问不到基类Base中的成员变量x的值。** - **解析:**正确。无论在哪种继承方式下,私有成员都是不可见的,因此无法直接访问。 7. **在静态成员函数的实现代码体内不能...
在C++中,我们通过类(class)来实现封装,定义私有(private)、保护(protected)和公有(public)成员。私有成员只能在类内部访问,保护成员允许子类访问,而公有成员可以被外部代码调用。封装的目的是隐藏实现...
`public`成员可以在类的任何地方访问,`private`成员只能在类的内部访问,`protected`成员则对子类可见。合理的访问控制有助于封装,防止意外修改重要数据。 4. **构造函数与析构函数**: 构造函数是在创建对象时...
- **公有继承**:基类的公有成员和受保护成员在派生类中保持其访问属性。 - **私有继承**:基类的所有成员在派生类中都变为私有。 - **受保护继承**:基类的公有成员和受保护成员在派生类中变为受保护。 ### STL与...
5. 类模板关键字:在C++中,定义类模板时使用的关键字是`template`,选项D正确。 6. 访问权限属性:C++的访问权限包括公有(`public`)、保护(`protected`)和私有(`private`),非类成员没有这些属性,选项A正确。 7....
C++中的继承是面向对象编程的一个重要特性,它允许一个类(派生类)从另一个类(基类)中继承属性和行为。这使得代码重用变得更加高效,同时支持多态性,即不同类型的对象可以对同一消息作出不同的响应。书中会讲解...
在C++中,对象是类的实例,类定义了对象的属性(数据成员)和行为(成员函数)。通过类的定义,我们可以创建多个具有相同结构的对象,实现代码复用。 二、封装 封装是面向对象的核心特性之一,它隐藏对象内部的实现...
- **保护继承**(Protected): 基类的公有成员和保护成员都成为派生类的保护成员。 - **私有继承**(Private): 基类的公有成员和保护成员都成为派生类的私有成员。 - **继承性**: - 私有成员: 派生类无法访问基类的...
1. **类和对象的定义**(实验3 类和对象的定义2.docx):C++中的类是对象的蓝图,它定义了一组数据成员(变量)和成员函数(方法)。对象则是类的具体实例。在C++中,通过`class`关键字创建类,并使用`public`、`...
此外,C++类的成员可以使用访问修饰符public、protected和private来控制对成员的访问权限。 最后,C++标准库中包含了大量的范型算法,这些算法可以在各种容器类型中使用,如vector、list等。这些算法通常使用迭代器...
本课件旨在帮助学习者掌握C++中的面向对象概念,包括类、对象、封装、继承、多态等核心概念。 1. **类与对象**: - **类**:类是C++中定义数据类型的方式,它描述了一组具有相同属性和行为的对象的模板。在类中,...