c++中子类不能继承父类的一些函数这个不能继承修饰的到底是什么

如题所述

class
Base
{
Base(
int
)
{
...
}
Base(
const
Base&
rhs
)
{
...
}
//
复制构造函数,
可以继承
Base&
operator=(
const
Base&
rhs
)
{
return
*this
;
}
//
复制赋值操作符,
可以继承
Base&
operator=(
int
x
)
{
...
return
*this
;
}
//
赋值运算符重载函数,
不能继承
}
;
class
Derived
: public
Base
{
}
;
int
main()
{
Base
b(
10
)
//
okay,
general
construction
Derived
d(
10
)
;
//
error,
你不能继承父类的构造函数
Base
b2(
b
)
;
//
okay,
copy
construction
Derived
d2(
d
)
;
//
okay,
调用Base::Base(const
Base&
),
结果是部分复制.
Base
b3
;
b3
=
b
;//
okay,
copy
assignment
Derived
d3
;
d3
=
d
;
.//
okay,
调用Base::operator=(
const
Base&
),
结果是不完全赋值
b
=
4
//
okay
,
call
Base::operator=(
int
)
;
d
=
4
//
error
}
作者的意思是,你得自己定义这些函数
不能继续原因很简单.
这些复制控制函数会初始化,或销毁自己的成员,
在基类中,
根本就不可能
知道远程子类的成员,
更不用谈初始化或者销毁它们.
所以大部分情况都是子类在自己的构造函数中调用父类构造函数,初始化父类成员,
然后再初始化自己的成员
网上没有多谈这些的原因是.
熟悉C++面向对象的人自然而然理解为什么不能继承.
不熟悉C++面向对象的人,
根本就想不到这类问题.
所以你应该是少部分懂?不懂?的人.
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-12-20
class
Base
{
Base(
int
)
{
...
}
Base(
const
Base&
rhs
)
{
...
}
//
复制构造函数,
可以继承
Base&
operator=(
const
Base&
rhs
)
{
return
*this
;
}
//
复制赋值操作符,
可以继承
Base&
operator=(
int
x
)
{
...
return
*this
;
}
//
赋值运算符重载函数,
不能继承
}
;
class
Derived
: public
Base
{
}
;
int
main()
{
Base
b(
10
)
//
okay,
general
construction
Derived
d(
10
)
;
//
error,
你不能继承父类的构造函数
Base
b2(
b
)
;
//
okay,
copy
construction
Derived
d2(
d
)
;
//
okay,
调用Base::Base(const
Base&
),
结果是部分复制.
Base
b3
;
b3
=
b
;//
okay,
copy
assignment
Derived
d3
;
d3
=
d
;
.//
okay,
调用Base::operator=(
const
Base&
),
结果是不完全赋值
b
=
4
//
okay
,
call
Base::operator=(
int
)
;
d
=
4
//
error
}
不能继承构造函数:意味着子类不能覆盖这类函数,(就是说构造函数不能为虚)。另,不能把父类的构造函数当子类的成员函数来调用(这一点很关键,因为继承本质上意味着父类的成员就是子类的成员)。
子类的构造函数执行其他任何操作前,必须先调用父类的构造函数(除非父类没有构造函数),初始化父类地址空间成员。子类的构造函数可以指定由调用父类哪个构造函数(如果父类有重载多个构造函数),如果不指定,默认调用无参构造函数。
不能继承析构函数:子类可以覆盖父类的析构函数,不能把父类的析构函数当子类的成员函数来调用。

c++中子类不能继承父类的一些函数这个不能继承修饰的到底是什么
不能说是不能继承。通常情况下,子类的构造函数和析构函数一般会包含父类的流程。默认情况下,构造对象时,先调用父类的构造函数,然后调用子类的构造函数。销毁时是相反的,先调用子类的析构函数,再调用父类的析构函数。赋值运算符在程序员不重写的情况下,编译器会默认生成一个,但是它做的事情是位...

子类可以继承父类的什么
子类不能继承父类的所有方法和属性,只能继承父类所有的非private(私有)的属性和方法,而private成员是不能被继承的。打个比方:你能继承你爸的财产,但不能继承你爸的所有财产。因为你爸要养老,这是会把财产的一部分作为私有,不让你继承。 JAVA的继承也就这样。父类中public,protected修饰的属性...

C++中子类可以直接调用父类实现的函数吗
子类能不能调用父类的函数与继承方式有关,C++有三种继承方式:1.公用继承(public):对于基类成员在派生类中保持自己原来的的访问级别,原来是public(private\/ protected),在派生类中也还是public(private\/protected)。2.受保护继承(protected):基类中的public成员和protected成员在派生类中为protected,priv...

c++继承的规则是什么
(1)public(公有继承):继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public\/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。(2)private(私有继承):继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。

C++子类会无条件继承父类的构造函数么
在C++中,构造函数不会自动继承,只是如果子类没有写构造函数,那么系统会这个类自动添加一个默认构造函数,是一个空函数体,所以什么也没有做,接着就会调用父类的构造函数,所以你觉得是继承了父类的构造函数。子类和父类的构造函数的调用顺序:class B:public A B b1;那么构造函数的调用顺序是:A(...

C++编程中 子类(派生类)能不能重写父类(基类)的函数(方法),除了虚函数...
当然可以重写,函数名和参数保持一致就会重写;如果函数名一样,参数不一样则是隐藏;总之,非虚函数,只要子类定义了相同名称的,父类函数都不能直接访问。这样的问题,自己写个Test自然明了,印象也会更深刻。

C++基类的静态成员能被派生类继承吗
当然能被继承派生。

C++中,为什么子类对象可以赋值给父类对象而反过来却不行?
子类从父类继承了所有的方法和属性,那么父类有的子类都有,所以子类可以给父类的赋值;反过来,如果子类不但继承了父类的方法和属性,它还增加了新的属于自己的方法和属性,此时你用父类的对象去赋值给子类的对象,这些新的方法和属性要怎么操作呢,C++为了避免这样的现象出现,当你用父类对象给子类...

...继承时候子类中若有与父类里函数同名的函数,不是会覆盖父类中的...
覆盖的条件是:基类必须是虚函数(virtual声明的),发生覆盖的两个函数9要在派生类和基类中,函数名称和参数列表完全相同。你上面的这种情况没有用virtual,基类的函数被隐藏,不是覆盖。你回去可以看看多态那一张,好好复习下

在C++中如何区分类的继承和包含这两种关系
继承是从父类继承公有的属性和方法, 这些公有的属性和方法可以供多个子类使用, 写在父类里边就不用维护多份代码.包含就是定义另一个类的对象, 从这个类继承也可以得到这个类的想要的属性和方法, 与继承不同的是, 包含不是父子关系, 比如你写一个男人类, 他有一个女朋友对象, 那你只能使用包含,...

相似回答
大家正在搜