b***y 发帖数: 2799 | 1 ☆─────────────────────────────────────☆
xubest (既飞之蜻蜓) 于 (Wed Mar 19 00:19:46 2008) 提到:
比如有程序如下
#include
using namespace std;
class ABC
{
ABC(int a);
~ABC()
}
ABC::ABC(int a)
{
cout<
}
ABC::~ABC()
{
}
int main()
{
int OK=1;
ABC abc(OK);
return 0;
}
当定义对象abc的时候,直接把OK传递过去,直接运行构造函数。但是我现在死心眼,
偏偏想要把 “ABC abc(OK)” 这一行拆开写,但是要得到同样结果。
我希望先是
ABC abc;
然后
abc.ABC(OK);
但是这样做是不行的,因为构造函数不能被调用。而我又不想改动构造函数。
所以我的问题就是,如果在先定义了ABC abc的情况下,怎么做才能做到把OK值传递到
构造函数里? 让他运行同样的结果? |
|
n****g 发帖数: 58 | 2 class Bar: Foo {
public:
Bar():Foo(5){} // 先构造Foo的对象,编译器找不到没有参数的构造函数。在子
类的构造函数后面加上父类带参数的构造函数就行了
};
Bar objBar; |
|
g*********s 发帖数: 1782 | 3 【 以下文字转载自 JobHunting 讨论区 】
发信人: gandjmitbbs (Nothing), 信区: JobHunting
标 题: 关于构造函数的一道测试题
发信站: BBS 未名空间站 (Sun Dec 16 02:42:51 2007)
class Foo{
public:
//Foo(){}
Foo(int i){}
};
class Bar: Foo {
public:
Bar(){}
};
Bar objBar;
问编译是否能通过?如果不能如何修正?
自己试了一下,说没有合适的Foo默认构造函数可用。将那行注释关掉就行了。但是编
译器不是应该自动生成一个Foo::Foo(){}吗? |
|
N***m 发帖数: 4460 | 4 你不写构造函数的话,compiler帮你自动生成。
没有特殊需求的话,你可以省略构造函数。 |
|
u**r 发帖数: 663 | 5 可以给args造个单独的class,然后B,D都只要一个构造函数就好了,至于args怎么变都
在args类里头处理好,这样对args的调整只要做一次。
前面thrust 给的答案能解释一下吗,看不懂,很少用template |
|
w*******t 发帖数: 62 | 6 我的理解是,为不同个数的构造函数写一个template。比如说,有一个的,就写一个;
有两个的,就写两个。thrust的答案里就提到了这两种。再之后,有三个就写三个。
到用的时候,自动匹配相应个数的ctor。
不知道理解的对不对。 |
|
u**r 发帖数: 663 | 7 也就是说只要参数个数匹配,参数顺序可以通过调整template类型顺序实现。
那如果同时存在两个构造函数 B(int, double), B(double, int),是不是就不行了呢
?当然这种定义没啥实际意义。 |
|
g*********s 发帖数: 1782 | 8 我有的那个不是default啊。难道只要我有任意一个自定义构造函数,编译器就放弃自
动生成吗?为何要这样设计呢?像这个例子,编译器完全可以推断出没有默认构函然后
自动生成啊。 |
|
|
k*****2 发帖数: 252 | 10 refc x=f10();
这句难道不是x的构造函数是调用copy ctor?
called?" |
|
z****e 发帖数: 2024 | 11 对,我用的是g++,这句话好像没有调用关于x的任何构造函数。
觉得可能是compiler的优化设计。 |
|
s******c 发帖数: 1920 | 12 为什么一下程序可以省略构造函数?什么情况下可以省略?
// friend functions
#include
using namespace std;
class CRectangle {
int width, height;
public:
void set_values (int, int);
int area () {return (width * height);}
friend CRectangle duplicate (CRectangle);
};
void CRectangle::set_values (int a, int b) {
width = a;
height = b;
}
CRectangle duplicate (CRectangle rectparam)
{
CRectangle rectres;
rectres.width = rectparam.width*2;
rectres.height = rectparam.height*2;
return (rectres)... 阅读全帖 |
|
G****A 发帖数: 4160 | 13 我的本意是:
B的default构造函数永远不被调用(放在private),所以实际B()中ref2A_赋值无所谓。
如果这么做有什么不妥,请指正。
reference
to
point? |
|
h*c 发帖数: 1859 | 14 【 以下文字转载自 JobHunting 讨论区 】
发信人: woodsmart (pythonip), 信区: JobHunting
标 题: 问个构造函数的问题
发信站: BBS 未名空间站 (Thu Feb 2 18:24:30 2012, 美东)
看神贴看到一道题,想问问有什么好的解法?
Given two classes:
class B
{
public:
B(args_1);
B(args_2);
// and many constructors with different arg lists
};
class D : public B
{
public:
D(args_1) : B(args_1) {}
D(args_2) : B(args_2) {}
// and many constructors with different signatures similarly implemented
// some additional stuff specific to D
};
Assume that the arg list for B's construct... 阅读全帖 |
|
d******i 发帖数: 7160 | 15 近日细读,发现认识差得太远,还请大大们解惑。
第9页开始:
从“针对1.0版本类定义编写的客户分配4个字节的内存,并传给类的构造函数...”
到段末。
背景在前几页交待了,大意是把fastString类做成DLL便于独立更新。客户程序运行时
才从DLL里面load方法。
我不明白的地方是“针对1.0版本类定义编写的客户”是怎么得到"4个字节"这种信息的?
我推测只能是让一份1.0版的.h参与编译的结果吧?
而这已经假设了客户需要一份新的.h重做编译,而不是简单地保留旧版的客户程序,去
透明地调用新版的DLL了。
那么这段论述的point到底是什么呢(读完本页会更不明白)?完全独立发布DLL的
solution不存在? 还是...
特附5-10页。请指教。
谢谢! |
|
d******i 发帖数: 7160 | 16 近日细读,发现认识差得太远,还请大大们解惑。
第9页开始:
从“针对1.0版本类定义编写的客户分配4个字节的内存,并传给类的构造函数...”
到段末。
背景在前几页交待了,大意是把fastString类做成DLL便于独立更新。客户程序运行时
才从DLL里面load方法。
我不明白的地方是“针对1.0版本类定义编写的客户”是怎么得到"4个字节"这种信息的?
我推测只能是让一份1.0版的.h参与编译的结果吧?
而这已经假设了客户需要一份新的.h重做编译,而不是简单地保留旧版的客户程序,去
透明地调用新版的DLL了。
那么这段论述的point到底是什么呢(读完本页会更不明白)?完全独立发布DLL的
solution不存在? 还是...
特附5-10页。请指教。
谢谢! |
|
b***k 发帖数: 2673 | 17 ☆─────────────────────────────────────☆
trenchant (N/A) 于 (Wed Oct 17 16:19:38 2007) 提到:
A, B, C三个类的构造函数被调用的顺序?
class C
{
....
};
class A
{
...
}
class B :public A
{
C c_member;
}
void main()
{
B b_member;
}
☆─────────────────────────────────────☆
shide (Sunny Shide) 于 (Wed Oct 17 18:21:50 2007) 提到:
我从来不认真考虑这种问题的,真想知道的时候写个最简单的程序步进调试就行了....
..
☆─────────────────────────────────────☆
everforget (yy) 于 (Wed Oct 17 18:36:15 2007) 提到:
A,B,C
☆─────────────────────────────────────☆
tr |
|
d*e 发帖数: 843 | 18 给定任意的一个单调增函数满足
g(t)<=t/2 for all t
g'(t)<1 for all t
g(t)->\infty,as t->\infty
可以构造函数 b 满足以下两个条件:
(i) b(\infty)=\infty
(ii) b(t)-b(g(t))=0
C是常数
可假设g光滑性,g,b皆为正值函数。 |
|
D****A 发帖数: 360 | 19 exactly. 这种情况不算复制构造,因为是原始构造。
;; Function refc f10() (_Z3f10v)
refc f10() ()
{
struct refc & k.101;
struct basic_ostream > & D.29480;
struct refc & k.102;
{
struct refc k;
(void) 0;
k.101 = ;
__comp_ctor (k.101);
try
{
D.29480 = operator<< (&cout, &"k exist()"[0]);
operator<< (D.29480, endl);
return ;
}
catch
{
k.102 = ;
__comp_dtor (k.102);
}
}
} |
|
B*****t 发帖数: 335 | 20 请教一下这段代码有两个object被构造k和x, 但在G++里面为什么只调用了一个
dtor,看了一下汇编代码,只有x被的dtor被调用了,k的dtor为什么没有被调用?
而且refc x=f10();这句并没有调用copy ctor。why?
refc f10(){
refc k;
cout<<"k exist()"<
return k;
}
int main(int argc, char* argv[ ]){
refc x=f10();
}
[class.temporary] |
|
p***o 发帖数: 1252 | 21 Just did a title search for 构造 ... |
|
B*****t 发帖数: 335 | 22 thanks。
研究了一下汇编代码,终于明白了k和x指向同一块内存空间,这块空间实在main函数的
stack中分配的而不是f10. 以前以为是在f10中分配的,怎么想也觉得这个优化有问题。 |
|
S****z 发帖数: 666 | 23 那请各大高手来解答一下我的问题
为什么C++的默认构造函数不初始化它的成员变量?
比如一个pointer int *,它默认初始化一下为NULL不是很好吗?
how
fine. |
|
e******0 发帖数: 211 | 24 类类型调用默认构造函数
内置复合类型,在类的局域域,不初始化 |
|
x****u 发帖数: 44466 | 25 这事和私有不私有没半点关系,关键问题是C++没对语法特性跨模块给出个规范来。所
以只要不能随意rebuild world的平台,类似技术就必不可少。
COM的基础就是把一切特性都包含到函数指针表里面,然后进一步重新通过这个指针表
实现对象的各种特性。即使在Linux下的很多子系统内,类似的实现也很多。
.h |
|
x****u 发帖数: 44466 | 26 这事和私有不私有没半点关系,关键问题是C++没对语法特性跨模块给出个规范来。所
以只要不能随意rebuild world的平台,类似技术就必不可少。
COM的基础就是把一切特性都包含到函数指针表里面,然后进一步重新通过这个指针表
实现对象的各种特性。即使在Linux下的很多子系统内,类似的实现也很多。
.h |
|
y**b 发帖数: 10166 | 27 以前读C++ Primer第四版中文版给自己写了个摘录,一搜索“初始化”,发现内容还很
庞杂,贴出来供参考,前面是页号。
042 两种初始化: 直接初始化(), 拷贝初始化=
044 变量初始化:类类型调用默认构造函数,局部内置类型不初始化,全局内置类型初
始化为零。
080 容器元素的值初始化(未指定元素的初始化式时):类类型调用默认构造函数,内置
类型置零。
097 数组元素的初始化(同变量初始化规则044):元素为类类型的数组调用默认构造函数
;局部内置数组不初始化,全局内置数组初始化为零。
117 new动态数组元素的初始化:类类型调用默认构造函数,内置类型不初始化,或指定
进行值初始化为零(且只能为零)。
151 new动态对象之初始化:类类型调用默认构造函数,内置类型不初始化,或指定进行
值初始化为任意值。
对提供了默认构造函数的类类型,没有必要进行值初始化, 会自动调用构造函数:
string *p=new string;和string *p=new string();无区别。
对内置类型或未定义默认构造函数的类类型,存在区别:int *p=new int... 阅读全帖 |
|
w***g 发帖数: 5958 | 28 我需要产生一系列同分布的哈希函数,想存在一个数组里。哈希函数的构造函数接受一
机函数生成器的引用用于产生随机数。这样顺序产生的哈希函数可以各不相同但属
于同
。
问题是new只能调用无参构造函数; vector允许调用无参或拷贝构造函数。拷贝构造函
数不
行因为产生的对象是完全一样的,而不是独立同分布的。
我目前的做法是定义一个无参构造函数,不干任何事情,再定义一个init方法做真正的
化。vector分配后用一个循环初始化每个元素。但我觉得这种做法不好,因为一开
始生
对象其实并没有真正初始化,如果忘了调用init就会出错。另外同时存在构造
函数和ini
非常混乱。
另一种方法是分配一个指针数组,然后挨个new。用完了挨个delete。感觉比较原始,
得判
断0指针什么的,也很不爽。
重载拷贝构造函数最简单,但是这样就没法保持“拷贝”的语义,也会引起混乱。
不知道有没有什么好的idiom或者现成的library可以用。 |
|
z****e 发帖数: 2024 | 29 除了死记硬背,lz可以这样理解这个问题,
在进入constructor的left openning brace { 之前,所有的subobjects 必须被
initilaized。包括基类和所有成员。不论你使用不使用初始化表符。
如果你不使用初始化表符,在进入{ 之前,编译器调用默认的基类构造函数。如果你使用初始化表符,在进入{ 之前,你自己调用基类的构造函数,(包括copy ctr)。
好,这就说明,初始化基类的成员,在进入 { 之前,只能通过编译器调用默认的基类构造函数,或者你自己调用基类的构造函数来实现。而基类在被初始的时候,在进入基类的{ 之前,基类的所有成员,也要被初始化。
所以,Base::_datum,是在进入Base的构造函数的{ 之前被初始化的,而不是你这个派生类的{ 之前。
这个同时也解释了,为什么初始化表符都是比构造函数赋值更高效,因为进入构造函数{ 以前,必须经历默认的初始化,或者自定义的初始化。进入构造函数以后,都是赋值了。 |
|
h*h 发帖数: 27852 | 30 http://www.yinwang.org/blog-cn/2015/04/03/paradigms
编程的宗派
总是有人喜欢争论这类问题,到底是“函数式编程”(FP)好,还是“面向对象编程”
(OOP)好。既然出了两个帮派,就有人积极地做它们的帮众,互相唾骂和鄙视。然后
呢又出了一个“好好先生帮”,这个帮的人喜欢说,管它什么范式呢,能解决问题的工
具就是好工具!我个人其实不属于这三帮人中的任何一个。
面向对象编程(Object-Oriented Programming)
如果你看透了表面现象就会发现,其实“面向对象编程”本身没有引入很多新东西。所
谓“面向对象语言”,其实就是经典的“过程式语言”(比如Pascal),加上一点抽象
能力。所谓“类”和“对象”,基本是过程式语言里面的记录(record,或者叫结构,
structure),它本质其实是一个从名字到数据的“映射表”(map)。你可以用名字从
这个表里面提取相应的数据。比如point.x,就是用名字x从记录point里面提取相应的
数据。这比起数组来是一件很方便的事情,因为你不需要记住存放数据的下标。即使你
插入了新的数据成... 阅读全帖 |
|
b***i 发帖数: 3043 | 31 【新问题】
4. boost::format的返回值是string吗,我应该用string&吗?
比如: std::string& str = boost::format(......);
std::cout<
throw ... (str);
这样可以省掉一个复制吧?
5. 类UUU的static函数里面
static std::map un= {{c1, &DD:DDDD1()}, {c2, &DD:DDDD2()},};
...
就是说,一个静态变量定义在函数里面。我想可以避免程序启动时各个编译单元启动顺
序的问题。这里的DD:DDDD1()就是一个库里面DD类的static函数,返回一个变量的参考。
今天reviewer说要我改成把un放到类UUU这一层去,而不是在函数里面。这样就不能避
免启动问题了。而且很麻烦,因为不是简单的整数,浮点数等,是不知道怎么实现的类
(有头文件)。大家说我的做法对不对?另外我这样做是照着其他人写的抄的。有一个
人告诉我这样写好
6. 搜索rvalue reference vari... 阅读全帖 |
|
P****D 发帖数: 11146 | 32 http://www.guokr.com/post/81577/
微博上@叫兽易小星 发的……
某天收到一条短信:
“大叔你好!工作忙吗?我是北京XX大学的女学生,农村出身,家里种地的,弟弟还在
上学,下学期的生活费没有着落,能拜托大叔援助一下吗?我品学兼优,五官端正,身
高1米63,一定让你满意!”
我想了想,顺手回了一条:
“请用拉格朗日中值定理证明若x->0+lim f(x) =f(0)= 0,且当x>0时,f`(x)>0,则x>
0时,f(x)>0。”
果然长久没有动静了……
哪知道10分钟之后手机响了,打开一看……
“这个x>0时有f(x)-f(0)=f`(m)m,其中m在(o, X)上,由已知f(O)=o,故有f(x)>0。
我答对了吗?”
-----------------
某天收到一条短信:
“大叔你好!工作忙吗?我是北京XX大学的女学生,学国际政治的,农村出身,家
里种地的,弟弟还在上学,下学期的生活费没有着落,能拜托大叔援助一下吗?我品学
兼优,五官端正,身高1米63,一定让你满意!”
我想了想,顺手回了一条:
“前苏联有哪15个国家... 阅读全帖 |
|
l********a 发帖数: 1154 | 33 c++的,新手
做了个类,类内部外部定义的格式大家就别看了,目前主要是问问流程问题
因为这个类我是递归初始化的,所以有一个构造器是接受一个Test *parent
class Test
{
Test *parent;
list children;
...
// 递归子构造函数
Test(Test *parent) // 构造器,接收一个Test指针,所有子构造器构造出的对象
的父节点
{
...
this->parent = parent; // 这里不知道为什么没有初始化好
for (循环)
{
this->children.push_back(Test(this));
...
}
// 主构造函数,解析文件内容构造
Test(string &fname) // 构造器,接收一个文件名
{
...
this->parent = NULL;
Te... 阅读全帖 |
|
b***i 发帖数: 3043 | 34 我在main里面调用一个自己写的类OldSplashScreen的函数,起了一个线程,执行
splash()(其中145行splashWindow = new SplashWindow(this,fImage);)
178在一个private class SplashWindow extends JFrame的类中,是构造函数
private class SplashWindow extends JFrame {
BufferedImage base=null;
public Graphics2D gS=null;
private static final long serialVersionUID = 1L;
BufferedImage bf=null;
BufferedImage canvas=null;
178: SplashWindow(Frame aParent, Image aImage) {
构造函数怎么会出错?我估计是非Swing EDT里面调用Swing类Frame子类的构造函数了。
... 阅读全帖 |
|
l********a 发帖数: 1154 | 35 c++的,新手
做了个类,类内部外部定义的格式大家就别看了,目前主要是问问流程问题
因为这个类我是递归初始化的,所以有一个构造器是接受一个Test *parent
class Test
{
Test *parent;
list children;
...
// 递归子构造函数
Test(Test *parent) // 构造器,接收一个Test指针,所有子构造器构造出的对象
的父节点
{
...
this->parent = parent; // 这里不知道为什么没有初始化好
for (循环)
{
this->children.push_back(Test(this));
...
}
// 主构造函数,解析文件内容构造
Test(string &fname) // 构造器,接收一个文件名
{
...
this->parent = NULL;
Te... 阅读全帖 |
|
X****r 发帖数: 3557 | 36 Test(this);并没有调用同一个对象的另一个构造函数,它创建了一个新的临时对象。
你不能在一个构造函数里调用另一个构造函数。把共同的部分提出来成为一个新函数,
让两个构造函数都调用它。 |
|
k**********3 发帖数: 3 | 37 关于类的疑问
1,在类的定义中,即在class的大括号里,是不是只能放函数定义,函数声明,变量定
义,变量声明这四类语句?
2,在private部分可以放函数定义或申明吗?同理在public可以放变量声明或定义吗?
3,某对象的成员函数可以访问同类的其他对象的数据(通过传入引用),无论其是
private or public,但是不能访问不同类型对象的private数据,但是可以访问其
public数据?
4,我看的书是《c++程序设计语言特别版》,在看类时(P203),发现他在声明成员函数
,若没有参数,也不写void,而是直接一个空括号,如果没有返回值 也不写void,还有
,是不是构造函数都没有返回值?
5,成员初始化是不是就两种:用初始化式;或用构造函数,且前者优先级高?用初始化
式什么意思,直接在成员变量申明的时候直接赋值语句吗?
6,关于成员常量的问题:
书上说了“对于静态常量整型成员,可在常量成员声明加上一个常量表达式作为初始式
”,但对于其他类型的常量呢?怎么初始化啊?
7,关于自定义类型的数组的初始化
书上也说了,“若在构造某个类的对象时可以不提供显式的初始式,则可以 |
|
w****h 发帖数: 212 | 38 【 以下文字转载自 Mathematics 讨论区 】
发信人: wmbyhh (wmbyhh), 信区: Mathematics
标 题: 如何由函数在某点值、及其前2阶导数值,构造此函数
发信站: BBS 未名空间站 (Wed Apr 16 00:59:02 2008)
如果已知一个关于f的函数D(f),在点f=C处的函数值f(C)、一阶导数值f'(C)、二阶导
数值f''(C),那么如何构造此函数原型?
Besides, it requires the function D(f) is quadratic (only) for f>C.
I don't know what does quadratic means? |
|
d**********x 发帖数: 4083 | 39 我擦,这是c++的构造函数列表啊
在这里你可以有机会传进成员对象构造的参数
struct B {
B(int i = 0) {}
};
struct A {
A(){
//这里b已经构造
}
B b;
};
struct C {
C() : b(1) /*用自定义的参数构造*/ {
}
B b;
}
有些成员没有缺省构造函数,这里也是唯一可以传进参数的地方,这里也是给父类构造
函数传入参数的地方。。。 |
|
y**i 发帖数: 1112 | 40 主要的问题在于编译器认为a=1的语句会去调用哪一个函数,一般a=1实际上是要去隐式
调用构造函数,除非你声明你的第一个构造函数A(int)为explicit。这里似乎如果你声
明copy构造的参数为非const的时候,造成了声明的歧义,A a=1的语句试图去匹配这个
构造函数,变成了类似A temp(1), a(temp);但声明为const就不会造成这种歧义,让a=
1直接去寻找A(int)的signiture |
|
t****t 发帖数: 6806 | 41 解释得不错, 我想你现在应该认识到, 需要死记硬背的东西确实很少.
使用初始化表符,在进入{ 之前,你自己调用基类的构造函数,(包括copy ctr)。
类构造函数,或者你自己调用基类的构造函数来实现。而基类在被初始的时候,在进入
基类的{ 之前,基类的所有成员,也要被初始化。
个派生类的{ 之前。
数{ 以前,必须经历默认的初始化,或者自定义的初始化。进入构造函数以后,都是赋
值了。 |
|
e******0 发帖数: 211 | 42 新手,在学c++
base 定义了构造函数,但是没有默认构造函数.
派生类没有构造函数,compiler会合成一个,基类部分用基类的默认构造函数初始话,
错误.. |
|
b***i 发帖数: 3043 | 43 我猜,你不加reference可以编译是因为你没有显式写构造函数。但是不写构造函数,有没有namespace没什么不同,同样可以编译运行,用好include, using namespace就行。你如果写了构造函数,尽管没有namesapce,没有reference仍然会报同样的错。
加了reference(当然应该要加),就可以有正常的构造函数,而这种情况,有没有namespace也没什么大的不同,用好include, using namespace就行。
写visual studio的dll, 必须(或者说,推荐)把所有事情都做对,参考
http://www.mitbbs.com/article_t/Programming/31216231.html |
|
r*g 发帖数: 186 | 44 struct S{
S(int){}
};
struct SS{
int m;
SS(int x): m(x){}
explicit operator S(){return S(m);}
};
void f(S s){}
int main()
{
SS ss(1); // ok; 默认构造函数
S s1 = ss; // 错误; 拷贝构造函数不能使用显式转换
S s2(ss); // ok; 直接构造函数可以使用显式转换 ???
// 为什么? 这里难道不是 S s2(static_cast(ss))吗???
// 而且我的理解这里是先ss转成S型的临时变量
// 然后调用copy constructor
// 为什么说这里是直接构造函数?
f(ss); // 错误; 从SS向S的转换必须是显式的.
// 译注: 强制类型转换也可使... 阅读全帖 |
|
r*g 发帖数: 186 | 45 to AlphaCode 你看看我理解的对不对
感觉我这种半路出家的半吊子学C++坑太多了
以前认为C很多坑
现在觉得C++不仅继承了C的坑, 还挖了很多新的坑
我发现我C++的很多基本概念还没弄明白
常年把C++当C在用
// 所以不会有任何问题
// 首先: 根据链接:
http://en.cppreference.com/w/cpp/language/explicit
解释:
explicit operator type ( ) (since C++11)
specifies that this user-defined conversion function is only considered f
or direct initialization (including explicit conversions)
所以explicit operator S(){return S(m);}这个用户自定义转换函数只能用于direct
init,但是这里S s1 = ss; 不是direct init而是copy init:
我臆测为什么不是direct init:
因为direc... 阅读全帖 |
|
w***g 发帖数: 5958 | 46 你们拿const啥的说事的太弱了。给你们来点真正恶心的。
就是A分别被B1, B2继承,然后C又同时多继承B1, B2。
然后构造C的对象的时候就要分别调用B1和B2的构造函数。
如果不加特殊处理,B1和B2的构造函数又会分别调用A的构造函数。
这样A就被构造了两遍。怎么解决?
如果B1和B2分别重载了A的同一个虚方法,而C又没有重载
这个方法,这时通过C的指针调用的是谁的方法?
如何指定C必须用B2的虚方法?
这种结构有个专门的名字,叫做dreaded diamond。
为了解决多个路径指向同一个基类的问题,专门引入了
virtual inheritance机制。这里面的机制很少有人能弄明白,
而且即使弄明白了要写成代码也会被人骂死。
(Scala的trait有一个类似的机制,但还是不如C++的多继承复杂.)
赶紧趁早都转java去吧。 |
|
a**********s 发帖数: 588 | 47 int main()
{
Derived *Var = new Derived();
>>>> 这个语句, 分别调用基类和派生类的构造函数, 于是
>>>> Constructor: Base //1
>>>> Constructor: Derived //2
Base Var2;
>>>> 这个语句, 调用基类构造函数, 于是
>>>> Constructor: Base //3
Var2 = (Base) *Var;
>>>> 这个语句有一丝丝复杂, 等号右边产生一个临时Base类型的变量,
>>>> 调用Base类的"拷贝构造函数" Base(const Base&), 但是
>>>> 这个你没有定义, 所以什么都没有打印出来
>>>> 临时变量消灭的时候, 调用析构函数, 于是:
Destructor : Base //4
delete Var;
>>>> 这个比较简单
>>>> Destructor : Derived //5
>>>> Destructor : Base //6
return 0;
>>>> 这个也比较简单, 因为Var1的生命周期随着函数的返回结束
>>> |
|
f*********g 发帖数: 632 | 48 问自守函数吧?如何推广L函数而得到自守函数?或者说如何构造自守函数?
复变函数,常微分方程,代数曲线等几个方向都涉及过自守函数。不知道如何构造或者
推广Lh函数。 |
|
g****a 发帖数: 1520 | 49 【 以下文字转载自 WaterWorld 讨论区 】
发信人: xiaoshushu (songshu), 信区: WaterWorld
标 题: 关于近期Fano流形上构造KE度量的工作(转载)
发信站: BBS 未名空间站 (Sat Aug 31 10:30:12 2013, 美东)
关于近期Fano流形上构造Kähler-Einstein度量的工作
最近公布的Fano流形上构造Kähler-Einstein度量的工作,是Kähler几
何近年来引人注目的进展,专家们正在验证。若验查无误,将证明丘成桐关于Fano流形
的构想与猜测是正确的。Donaldson的稳定性条件是其中的关键步骤,还需在代数几何
上把此概念搞清楚,这样丘猜测就为深刻理解Fano流形奠定了基础。由于近期发生了一
些混淆不清的事件,我们将相关工作的公开记录做了客观、学术的分析,望有助于澄清
事实。本文主要涉及文献的比较,阅读本文无需是专家,数学专业本科高年级学生或研
究生可读懂绝大部分。欢迎关于数学上的批评与指正。
本文分三个部分:
1) 陈-Don... 阅读全帖 |
|
g****a 发帖数: 1520 | 50 【 以下文字转载自 WaterWorld 讨论区 】
发信人: xiaoshushu (songshu), 信区: WaterWorld
标 题: 关于近期Fano流形上构造KE度量的工作(转载)
发信站: BBS 未名空间站 (Sat Aug 31 10:30:12 2013, 美东)
关于近期Fano流形上构造Kähler-Einstein度量的工作
最近公布的Fano流形上构造Kähler-Einstein度量的工作,是Kähler几
何近年来引人注目的进展,专家们正在验证。若验查无误,将证明丘成桐关于Fano流形
的构想与猜测是正确的。Donaldson的稳定性条件是其中的关键步骤,还需在代数几何
上把此概念搞清楚,这样丘猜测就为深刻理解Fano流形奠定了基础。由于近期发生了一
些混淆不清的事件,我们将相关工作的公开记录做了客观、学术的分析,望有助于澄清
事实。本文主要涉及文献的比较,阅读本文无需是专家,数学专业本科高年级学生或研
究生可读懂绝大部分。欢迎关于数学上的批评与指正。
本文分三个部分:
1) 陈-Don... 阅读全帖 |
|