C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???相关的知识,希望对你有一定的参考价值。
RTRT。。。。
如果你想调用的函数是基类的静态成员函数,不定义派生类对象是可以调用的,格式:base::fun();因为静态成员并不是类的某个对象的成员,而是所有该类的对象所共享的。通过类名就可以直接访问。如果你想调用的不是静态函数,不定义派生类对象是不可能的。因为你调用的成员函数可能会访问到类的数据成员,而你没有定义一个对象,也就没有调用类的构造函数,也就没有对数据成员进行初始化。所以说必须通过类的对象来访问其非静态成员函数。 参考技术A 不可以吧,本人没试过。因为你没有定义对象的话,就无法获得函数入口。。。static函数或许可以,自己试一下就行~~不定义对象,就相当于没定义实体,却要求长宽高,道理一样。。。 参考技术B 假设基类是 CBASE那调用基类成员函数FOO()就是 CBASE::FOO();
调用当前类的成员函数方法是 this->FOO(); 参考技术C 在类里面定义的时候可以调用自己的成员函数
和父类的public和protected的函数
在其派生类C++的构造函数中调用基类的构造函数[重复]
【中文标题】在其派生类C++的构造函数中调用基类的构造函数[重复]【英文标题】:Calling the constructor of a base class inside the constructor of its derived class C++ [duplicate] 【发布时间】:2017-12-12 04:19:44 【问题描述】:我正在尝试编写一个将不同类型的蛋糕插入发票的程序,它使用了几个派生类。我想使用派生类的构造函数来初始化抽象父类中的一些数据成员。有没有办法可以做到这一点,以便我可以保持数据成员私有,并在派生类中调用基类构造函数来初始化它们?例如:
class Cake:
public:
Cake(string flavor, string frosting)
cakeType = flavor;
frostingType = frosting;
private:
string cakeType;
string frostingType;
;
class LayerCake: public Cake
public:
LayerCake(string flavor, string frosting, int layers, int
quantity)
numLayers = layers;
cakeQuantity = quantity;
Cake(flavor, frosting);
private:
int numLayers;
int cakeQuantity;
;
【问题讨论】:
【参考方案1】:在构造函数体内,Cake(flavor, frosting);
只是构造了一个临时的Cake
,与派生类的基类子对象无关。
你想要的是member initializer list,例如
class LayerCake: public Cake
public:
LayerCake(string flavor, string frosting, int layers, int
quantity) : Cake(flavor, frosting)
// ~~~~~~~~~~~~~~~~~~~~~~~~
numLayers = layers;
cakeQuantity = quantity;
...
;
【讨论】:
如果我使用的是头文件,我是在声明和实现中都使用这种语法,还是只在实现中使用? @Jake 只是实现。以上是关于C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???的主要内容,如果未能解决你的问题,请参考以下文章
C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承
C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承
C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承
C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承