Vis*_*al -2 c++ oop inheritance
#include<iostream>
using namespace std;
class A {
int i;
public:
// A() {cout<<"in A's def const\n";};
A(int k) {cout<<"In A const\n"; i = k; }
};
class B : public A {
public:
//B(){cout<<"in B's def const\n";};
B(int i) : A(i) {cout<<"in B const\n";}
};
class C : public B {
public:
C() {cout<<"in C def cstr\n";}
C(int i) : B(i) {cout<<"in C const\n";}
};
int main()
{
C obj=new C(2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,它显示在构造函数'C :: C()':88c8237e3ffce7819f082b210069fd59.cpp:19:13:错误:没有匹配函数调用'B :: B()'
为什么会发生这种情况,因为我只是在任何地方明确地调用参数化构造函数.请帮助C(){cout <<"in C def cstr \n";}
你不能申报
C() {cout<<"in C def cstr\n";}
Run Code Online (Sandbox Code Playgroud)
因为既没有基类A
也B
没有默认(非参数化)构造函数.如果您取消注释那些代码将编译(除了下面的注释).
一边评论,这是不正确的
C obj=new C(2);
Run Code Online (Sandbox Code Playgroud)
您可以使用以下任何一种方法
C obj(2);
C obj{2};
C obj = C(2);
Run Code Online (Sandbox Code Playgroud)
但是new
你必须分配一个指针(除非你出于某种原因需要堆分配的对象,否则我不建议使用它,在这种情况下更喜欢智能指针).
C* obj = new C(2);
delete obj; // remember to delete it when you're done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
66 次 |
最近记录: |