class A
{public:A();};
class A
{protected:A();};
class A
{private:A();};
分别有哪些作用。写在哪里都是一样的吗??
类的构造函数写在公有私有和保护里面有哪些用处
答案:5 悬赏:0 手机版
解决时间 2021-03-19 23:08
- 提问者网友:我没有何以琛的痴心不悔
- 2021-03-19 00:45
最佳答案
- 五星知识达人网友:玩世
- 2021-03-19 01:07
不一样。构造函数如果必须是公有的,这样才能在类外被调用。后面两种写法,你如果在主函数中声明 A a; 会报错。
如果将构造函数声明为受保护的,那么只能被子类调用了;
如果将构造函数声明为私有的,除了类自己的其他构造函数能够调用它之外,不能被类外和子类调用。
示例:
#include<iostream>
using namespace std;
class A
{
private:
A(){cout<<"A()"<<endl;}
public:
A(int a)
{
cout<<"A(int a): "<<a<<endl;
A();
}
};
int main()
{
A a(2);
return 0;
}
如果将构造函数声明为受保护的,那么只能被子类调用了;
如果将构造函数声明为私有的,除了类自己的其他构造函数能够调用它之外,不能被类外和子类调用。
示例:
#include<iostream>
using namespace std;
class A
{
private:
A(){cout<<"A()"<<endl;}
public:
A(int a)
{
cout<<"A(int a): "<<a<<endl;
A();
}
};
int main()
{
A a(2);
return 0;
}
全部回答
- 1楼网友:鱼芗
- 2021-03-19 03:03
必须是public
这是c++的规定。
- 2楼网友:迟山
- 2021-03-19 02:56
//---------------------------------------------------------------------------
#include <iostream>
class circle{
protected:
float R;
private:
float PI;
public:
circle(void){}
circle(float a):R(a),PI(3.14){};
void area(void) const
{
std::cout<<PI*R*R<<std::endl;
}
};
class square:protected circle{
public:
square(float a);
square(void){};
void area(void) const
{
std::cout<<R*R*4<<std::endl;
}
};
int main(void)
{
square sq(10);
circle cl(10);
cl.area();
sq.area();
return 0;
}
//---------------------------------------------------------------------------
- 3楼网友:酒醒三更
- 2021-03-19 02:44
不一样。构造函数如果必须是公有的,这样才能在类外被调用。后面两种写法,你如果在主函数中声明 A a; 会报错。
如果将构造函数声明为受保护的,那么只能被子类调用了;
如果将构造函数声明为私有的,除了类自己的其他构造函数能够调用它之外,不能被类外和子类调用。
示例:
#include<iostream>
using namespace std;
class A
{
private:
A(){cout<<"A()"<<endl;}
public:
A(int a)
{
cout<<"A(int a): "<<a<<endl;
A();
}
};
int main()
{
A a(2);
return 0;
}
- 4楼网友:白昼之月
- 2021-03-19 02:26
不一样。构造函数如果必须是公有的,这样才能在类外被调用。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯