面向对象的程序设计学习笔记-2

本文详细介绍了C++中基类的初始化过程,包括构造函数的调用顺序、如何通过派生类构造函数调用基类构造函数以及成员对象的初始化。通过具体的代码示例,展示了私有继承下如何访问基类成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在讲讲基类的初始化。在继承中,构造函数是不被继承的,c++提供了一种机制,使得派生类在创建对象的时候,能够调用基类的构造函数来初始化基类的数据。派生类中构造函数的声明形式如下:派生类构造函数(参数列表):基类(参数列表),对象成员1(参数表),对象成员2(参数表)……;这个顺序可以这么来说,先长辈(基类),再客人(对象成员),后自己(派生类)。注意在输入参数列表的时候,参数是不能写上类型的。比如以下的代码:

#include <iostream>
using namespace std;
class base
{
public:
base(){cout<<"\n base created.\n";}
};
class d_class:public base
{
public: 
d_class(){cout<<"\n d_class created.\n";}
};
void main()
{
d_class d1;
}

从结果中就可以直接看出来,在创建对象的时候是先调用了基类中的构造函数。还有一点需要注意的,就是在类与类之间,需要用分号隔开的。类{};类{}……

自己编写的以下的代码,并加上相关的注释

#include<iostream>
using namespace std;
class parent_class
{
int private1,private2;//缺省的时候是私有数据
public:
parent_class(int p1,int p2){private1=p1;private2=p2;}
int inc1(){return ++private1;}
int inc2(){return ++private2;}
void display(){cout<<"private1="<<private1<<",private2="<<private2<<endl;}
};
class derived_class:private parent_class
{
int private3;
parent_class private4;//创建基类对象,作为衍生类的成员
public:
derived_class(int p1,int p2,int p3,int p4,int p5)
:parent_class( p1, p2),private4(p3, p4)
{private3=p5;}
int inc1(){return parent_class::inc1();}
int inc2(){return parent_class::inc2();}//因为是私有继承,需要在派生类中重新定义
int inc3(){return ++private3;}
void display()
{
parent_class::display();//调用基类
private4.parent_class::display();//调用基类对象的显示函数
cout<<"private3="<<private3<<endl;
}
};
void main()
{
derived_class d1(17,18,1,2,-5);
d1.inc1();//此时的inc1是派生类中的inc1。
d1.inc2();//在派生类中重新定义了,以访问基类中的私有数据
//当为公有继承时可以用以下的方式进行访问d1.parent_class::display();
d1.display();//派生类中的显示函数,先调用基类的显示函数,再调用基类对象的显示函数,再显示private3的数据
d1.inc3();//使得private3自增
d1.inc2();
d1.display();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值