C++ 为什么我们需要使用构造函数来初始化值,而我们也可以不用构造函数呢? 请考虑下面所示的代码。一个使用构造函数初始化值,另一个不使用
代码#1C++ 为什么我们需要使用构造函数来初始化值,而我们也可以不用构造函数呢? 请考虑下面所示的代码。一个使用构造函数初始化值,另一个不使用,c++,C++,代码#1 #包括 使用名称空间std; 类矩形 { 公众: 整数宽度; 内部高度; }; int main() { 矩形rect1{3,4}; cout对于这种简单的数据类型,这可能无关紧要,但是有许多非普通的旧数据类型可以从中受益,甚至需要初始化才能发挥作用。构造函数有几个好处: 构造函数允许公共API(封装)。在更复杂的类中,调用方不应该接触的内部数据可能需要初始化 class Foo { public: Foo(int x) { internal_data1 =
#包括
使用名称空间std;
类矩形
{
公众:
整数宽度;
内部高度;
};
int main()
{
矩形rect1{3,4};
cout对于这种简单的数据类型,这可能无关紧要,但是有许多非普通的旧数据类型可以从中受益,甚至需要初始化才能发挥作用。构造函数有几个好处:
- 构造函数允许公共API(封装)。在更复杂的类中,调用方不应该接触的内部数据可能需要初始化
class Foo
{
public:
Foo(int x) {
internal_data1 = some_computation1(x);
internal_data2 = some_computation2(x);
}
Some_Type3 some_method(int x)
{
return some_computation3(x, this->internal_data1, this->internal_data2);
}
private:
Some_Type1 internal_data1;
Some_Type2 internal_data2;
};
>P>涉及构造函数的C++概念有很多,如Debug可构造和可复制的构造函数。构造函数提供了一个通用接口,使泛型代码可以以统一的方式实例化不同类型的对象。
template<class T>
class Some_Generic
{
public:
Some_Generic(const T& t)
: internal_t(t) // Copy constructor used
{
// do work...
}
private:
T internal_t;
};
模板
给一些泛型分类
{
公众:
一些通用(常数T&T)
:internal\u t(t)//使用的复制构造函数
{
//做工作。。。
}
私人:
T内部T;
};
答案很简单,构造函数初始化,其他方法赋值
<>这个差别看起来不是很重要,但是考虑一下这个代码。
#include<iostream>
using namespace std;
class Sample
{
private:
const int num;
public:
void setval(int i)
{
num = i;
}
int getVal()
{
return num;
}
};
int main()
{
Sample s;
s.setval(12);
cout<<s.getVal();
}
您不必使用构造函数,但如果您需要做的不仅仅是为成员赋值,那么构造函数就很方便。只要成员是公共的,您就可以在不使用构造函数的情况下初始化它们。如果成员不是默认可构造的,您需要使用成员初始化列表方法来构造它们
template<class T>
class Some_Generic
{
public:
Some_Generic(const T& t)
: internal_t(t) // Copy constructor used
{
// do work...
}
private:
T internal_t;
};
#include<iostream>
using namespace std;
class Sample
{
private:
const int num;
public:
void setval(int i)
{
num = i;
}
int getVal()
{
return num;
}
};
int main()
{
Sample s;
s.setval(12);
cout<<s.getVal();
}
#include<iostream>
using namespace std;
class Sample
{
private:
const int num;
public:
Sample( int i):num(i){}
int getVal()
{
return num;
}
};
int main()
{
Sample s(12);
cout<<s.getVal();
}