首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++设计(基类中的行为,派生类中提供的私有成员)

关于C++设计,基类中的行为是指基类中定义的成员函数和变量,这些成员可以被派生类直接继承和使用。而派生类中提供的私有成员是指在派生类中定义的私有成员,这些成员只能在派生类中使用,不能被基类直接访问。

以下是一个简单的示例代码:

代码语言:c++
复制
class Base {
public:
    void baseFunction() {
        cout << "Base function called"<< endl;
    }
};

class Derived : public Base {
private:
    int privateVar;

public:
    void derivedFunction() {
        cout << "Derived function called"<< endl;
    }
};

int main() {
    Derived d;
    d.baseFunction(); // 可以直接访问基类中的成员函数
    d.derivedFunction(); // 可以直接访问派生类中的成员函数
    // d.privateVar; // 不能直接访问派生类中的私有成员变量
    return 0;
}

在这个示例中,基类Base中定义了一个成员函数baseFunction,派生类Derived继承了基类中的成员函数,并定义了一个私有成员变量privateVar和一个成员函数derivedFunction。在main函数中,我们可以直接访问基类中的成员函数baseFunction和派生类中的成员函数derivedFunction,但是不能直接访问派生类中的私有成员变量privateVar

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++私有成员会被继承吗

1.派生类间接访问私有成员继承私有成员派生类是“不可见“,这种”不可见“是指在派生类成员函数,或者通过派生类对象(指针,引用)不能直接访问它们。...在派生类还是能够通过调用共有函数方式来间接地访问私有成员,包括私有成员变量和私有成员函数。考察如下程序。...2.私有成员会被继承吗 如果并没有提供访问私有成员公有函数,那么其私有成员是否“存在“呢?还会不会被继承呢?...没有提供访问私有成员变量i公有方法,但是在A(以及A派生类)对象个,都包含变量i。...综上所述,私有成员一定存在,也一定被继承到派生类,从大小也可以看出派生类包含了私有成员,读者可自行考证。只不过收到C++语法限制,在派生类访问私有成员只能通过间接方式进行。

2.4K20

C++派生类成员访问形式

C++派生类成员访问形式主要有以下两种: 1、内部访问:由派生类中新增成员继承来成员访问。 2、对象访问:在派生类外部,通过派生类对象对从继承来成员访问。...今天给大家介绍在3继承方式下,派生类成员访问规则。...private成员私有派生类是不可直接访问,所以无论是派生类成员还是通过派生类对象,都无法直接访问从继承来private成员,但是可以通过提供public成员函数间接访问。...private成员私有派生类是不可直接访问,所以无论是派生类成员还是派生类对象,都无法直接访问从继承来private成员,但是可以通过提供public成员函数直接访问它们。...private成员私有派生类是不可直接访问,所以无论是派生类成员还是通过派生类对象,都无法直接访问private成员

2.4K70
  • C++派生类成员访问属性

    以下是摘自谭浩强《C++面向对象程序设计》一书中内容: 在派生类,对继承方式可以有public(公用)、private (私有的)和protected(保护)3种。...不同继承方式决定了成员派生类访问属性。...简单地说: (1)  公用继承(public inheritance) 公用成员和保护成员派生类中保持原有访问属性,其私有成员仍为私有。...(2)  私有继承(private inheritance) 公用成员和保护成员派生类成了私有成员。其私有成员仍为私有。...(3)  受保护继承(protected inheritance) 公用成员和保护成员派生类成了保护成员,其私有成员仍为私有

    1.1K40

    派生类虚函数和非虚函数继承效果

    “强制实现”,也就是只要是父指针调用普通函数,那就是父普通函数 而虚函数作用,主要是为了让父指针可以调用子类函数,这种是在运行时才决定调用哪个函数 1、虚函数:   C++虚函数主要作用是...“运行时多态”,父提供虚函数实现,为子类提供默认函数实现。...子类可以重写父虚函数实现子类特殊化。 2、纯虚函数:   C++包含纯虚函数,被称为是“抽象”。抽象不能使用new出对象,只有实现了这个纯虚函数子类才能new出对象。   ...C++纯虚函数更像是“只提供申明,没有实现”,是对子类约束,是“接口继承”。   C++纯虚函数也是一种“运行时多态”。...因此,在继承关系,子类不应该重写父普通函数,因为函数调用至于对象字面值有关。 参考链接

    8410

    c++对象和关系_对象只能访问该类私有成员

    二.和对象关系: 就是对象抽象化概念,一个就是一个对象集合总称,通俗来讲就是对象需要什么这个提供什么给对象,加入对象需要什么数据这个提供什么数据,对象需要什么功能这个提供什么功能...所有成员,任何代码均可访问该项,访问权限最大也就意味着最不安全 Private访问修饰符:范围:私有的,只有内部可以进行访问,允许一个将其成员变量和成员函数对其他函数和对象进行隐藏。...只有同一个函数可以访问它私有成员。即使是实例也不能访问它私有成员。...访问权限最小意味着针对于对象自己而言最安全; Protected访问修饰符:范围:受保护以及子类可以进行访问,允许子类访问它成员变量和成员函数。这样有助于实现继承。...和内嵌成员,只有派生类可以访问该项; Internal访问修饰符:范围:内部,默认,程序集内部可以访问,允许一个将其成员变量和成员函数暴露给当前程序其他函数和对象。

    1.6K10

    C++:43---派生类转换、静态动态变量

    二、转换本质 派生类可以转换为本质是: ①为什么派生类可以转换为派生类而来,因此派生类包含了方法和成员。...此时可以通过指针或引用指向派生类(相当于将派生类中继承那部分方法和成员绑定到上了,相当于派生类被截断了),然后就可以将派生类假装是一个对象来使用(调用其中成员/方法) ②为什么不能转换为派生类...:因为派生类可能会定义自己新成员/方法,但是这些成员/方法是中所没有的。...三、继承方式对类型转换影响 遵循下面3个规则: 假设B继承于A ①只有当B公有地继承A时,用户代码才能使用派生类转换;如果B是受保护/私有的继承于A,则不能使用派生类转换 因为保护或者私有继承...//错误,num属于B,而A内不含有此成员 return 0; } 七、其他情境下类型转换 当我们用一个派生类对象为一个对象初始化或赋值时,只有该派生类对象部分会被拷贝、移动或赋值

    1.7K10

    C++自动提供特殊成员函数

    默认构造函数: 如果未提供任何构造函数,c++会自动生成默认构造i函数。创建对象时会调用。...⽤于初始化过程(包括按值传递参数)。 原型: ```c++ Class_name(const Class_name&); ``` 它接受⼀个**指向对象常量引⽤**作为参数。...... } ``` - 如果类包含用于记录对象数**静态成员**,且其值会在新对象被创建时发生变化,则应提供一个显式复制构造函数来处理计数问题。...- 解决设计这种问题⽅法是进⾏深度复制(deep copy)。 - 复制构造函数应当复制字符串并将副本地址赋给str成员,⽽不 仅仅是复制字符串地址。...当 然,编译器开发⼈员通常不会花时间添加这样⾏为。 如果成员本⾝就是对象,则程序将使⽤为这个定义赋值运算符来复制该成员,但静态数据成员不受影响。

    71910

    Python成员

    对于每一个成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在内部才能方法 私有成员和公有成员访问限制不同: 静态字段(静态属性 公有静态字段:可以访问;内部可以访问;...派生类访问 私有普通字段示例 class C: def __init__(self): self....__add() # 派生类不能访问 总结 对于这些私有成员来说,他们只能在内部使用,不能再外部以及派生类中使用. ps:非要访问私有成员的话,可以通过 对象....___属性名,但是绝对不允许!!! 为什么可以通过.__私有成员名访问呢?因为在创建时,如果遇到了私有成员(包括私有静态字段,私有普 通字段,私有方法)它会将其保存在内存时自动在前面加上名....双下方法(后面会讲到) 定义:双下方法是特殊方法,他是解释器提供 由双下划线加方法名加双下划线 方法名具有特殊意 义方法,双下方法主要是python源码程序员使用,我们在开发尽量不要使用双下方法

    98240

    C++初阶(默认成员函数)

    呀哈喽,我是结衣 今天给大家带来里面的默认成员函数,一共有六个默认成员函数哦,包括构造函数,析构函数,拷贝构造函数,运算符重载函数,const成员函数,那么正篇开始。...6个默认成员函数 如果一个什么成员都没有,简称为空。 空真的什么都没有吗?并不是,任何在什么都不写时,编译器会自动生成以下6个默认成员函数。...内置类型就是语言提供数据类型,如:int/char…,自定义类型就是我们使用class/struct/union等自己定义类型,对于内置类型,编译器会提供一个随机值,但是对于自定义类型,编译器会调用它构造函数...1.3C++11更新 在C++11标准里,针对内置类型成员不能初始化缺陷,打了个补丁,就是:内置类型成员变量在声明时可以给默认值 #include using namespace...注意:如果类没有申请资源时,析构函数可以不写,直接使用编译器生成默认析构函数,比如 Date;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack。 完

    15110

    封装、继承、多态、重载:C++强大特性与代码设计

    protected(保护)访问修饰符与私有访问修饰符类似,但允许派生类(子类)访问保护成员。...继承 C++继承是面向对象编程一个重要概念,它允许一个派生类/子类)从另一个/父)继承属性和行为。...C++继承有以下几种类型: 公有继承(public inheritance):派生类继承了公有成员和保护成员,并且这些成员派生类访问权限与一样。...派生类对象可以直接访问公有成员私有继承(private inheritance):派生类继承了公有成员和保护成员,但是这些成员派生类访问权限变为私有。...,参数不同,virtual可有可无 抽象 作用: 抽象作为抽象设计目的而声明,将有关数据和行为组织在一个继承层次结构,保证派生类具有要求行为

    38110

    C++ 多级继承与多重继承:代码组织与灵活性平衡

    成员函数和属性};在这个例子,DerivedClass 从 BaseClass1 和 BaseClass2 继承。这意味着它将继承这两个所有属性和非私有成员函数。...在使用多级继承之前,请仔细权衡其优缺点,并考虑其他设计模式。C++ 多重继承多重继承允许一个从多个继承属性和方法。这意味着派生类可以继承多个功能和特性。...缺点复杂性: 多重继承会导致层次结构变得复杂,难以理解和维护。歧义问题: 当多个提供相同名称或功能成员时,可能会导致歧义问题。脆弱性: 对更改可能会意外影响派生类,导致代码错误。...访问控制规则在多重继承,访问控制规则遵循以下原则:公有继承: 派生类继承所有公有成员和受保护成员私有继承: 派生类不能继承任何私有成员。...受保护继承: 派生类继承所有受保护成员,但这些成员派生类变为私有。总结多重继承是一种强大 OOP 工具,可用于创建复杂层次结构。但是,它也存在一些缺点,例如复杂性和菱形继承问题。

    16510

    C++初阶——(默认成员函数)下

    时隔多天默认成员函数,在上篇博客我们讲了,构造函数和析构函数。简单回顾下,构造函数就是类似于初始化函数,他函数名与名相同,且没有返回值。...4.作为成员函数重载时,其形参看起来比操作数数目少1,因为成员函数第一个参数为隐藏this 5. .* :: sizeof ?: .注意以上5个运算符不能重载。...那么此时用户还在外自己实现一个全局赋值运算符重载,就和编译器在中生成默认赋值运算符重载冲突了,所以赋值运算符重载只能是成员函数。...C++规定:后置++在重载时多增加一个int类型参数,但调用函数时不用传第,编译器会自动传递。...3.const成员 将const修饰成员函数”称为const成员函数,const修饰成员函数实际修饰该成员函数隐含this指针,表明在该成员函数不能对任何成员进行修改。

    8610

    C++】继承 ⑩ ( 继承机制 static 静态成员 | 子类访问父静态成员方法 )

    一、继承机制中派生类 static 关键字 1、子类继承父静态成员 子类继承父静态成员 : 父 ( ) 使用 static 关键字 定义 静态成员变量 , 可以被所有的 子类 (...派生类 ) 共享 ; 2、父静态成员访问控制权限改变 继承自 父 静态成员变量 , 仍然遵循 继承 子类 访问控制特性 , public 公有继承 : 父成员 在 子类 , 访问控制权限...不变 , 共有 和 保护成员 可以在子类访问 , 私有成员不可在子类访问 ; 父 public 成员 仍然是 public 成员 ; 父 protected 成员 仍然是 protected...和 保护成员 可以在子类访问 , 私有成员不可在子类访问 ; 父 public 成员 变为 子类 protected 成员 ; 父 protected 成员 仍然是 protected...成员 ; 父 private 成员 仍然是 private 成员 ; private 私有继承 : 父成员 在 子类 , 所有成员访问控制权限 变为 private , 所有成员

    44110

    c++数据成员初始化次序

    分享一个之前学知识点,感觉还挺重要,就是当一个某个数据成员同时拥有就地初始化、构造函数初始化列表和构造函数函数体里赋值,那么它会先执行哪个?最后生效又是哪个呢?...根据老师讲解,数据成员初始化次序依次为: 就地初始化 > 构造函数初始化列表 >构造函数里赋值(严格意义上不能成为初始化) 而当三种初始化方式都有时,构造函函数体里赋值肯定执行,并且生效...,但是就地初始化和构造函数初始化列表执行情况是怎样呢?...所以当一个数据成员同时拥有就地初始化和初始化列表时,它会忽略就地初始化而执行构造函数初始化列表。...如果到代码有参构造函数函数体中加上 this->id = 20; ,运行结果会变为: 0 n = 1,id = 1 n = 1,id = 20 可以看到赋值把初始化列表给id初始化值覆盖掉了

    84520

    C++:40---继承成员变化关系

    一、派生类继承成员规则 ①派生类继承了所有数据成员与函数(不论公有成员、保护成员私有成员) ②派生类虽然继承了所有成员,但是能不能访问成员还与父成员属性(public、protected...、private)以及继承方式有关 ③静态成员:如果定义了一个静态成员,那么该静态成员在整个继承体系中都存在。...该静态成员只能定义一次,派生类不能再次定义 一个改变了静态成员值,整个继承体系值都将改变 #include using namespace::std; class A {...public A { public: int b_data; B(int data) :A(data), b_data(data) {} void showB(){} }; 可以看到B公有继承于A,B可以在内访问父...A所有public、protected成员,但不能访问private成员 由于父protected成员在子类也是protected,所以不能在外部直接使用 ?

    54610
    领券