构造函数的调用
在生成对象时系统调用构造函数
a没有参数 没有定义构造函数,系统自动定义一个空的构造函数,实际上相当于有个不带参数的构造函数
这里有带参数的构造函数,此时a要有参数,而且给数组参数时候要***逐个***定义
所以可以定义带默认形参值就是之前那个组合
然后尽量多种形式,可以是带参不带参都写
构造函数一般定义为公有成员
class Date
{
private:
int d, m, y;
Date( )
{
d = 11;m = 11;y = 2011; }
};
int main( )
{
Date today; // error C2248: “Date::Date”: 无法访问private 成员(在“Date”类中声明)
return 0;
}
带默认形参构造函数
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
int x,y;
public:
Point (int s=0,int g=0)
{
x=s, y=g; }
void setx(int x) {
this->x=x; }//当参数和成员数据相同时候用this->x指针形式表示类的数据成员x
void sety(int y) {
this->y=x; }
int getx() {
return x; }
int gety() {
return y; }
void display(){
cout<<x<<" "<<y<<endl;}
};
int main()
{
Point a(8,3);
Point v;
cout<<v.gety()<<endl;
cout<<v.getx()<<endl;
v.display();
a.display();
cout<<a.gety()<<endl;
cout<<a.getx()<<endl;
}
复制构造函数
生成一个对象的副本有2种途径:
途径1:建立一个新对象,将一个已有对象数据成员的值取出来
赋给新对象。
途径2:使用复制构造函数。
复制构造函数是一种特殊的构造函数,用来生成一个对象的副本。
复制构造函数的作用:
使用一个已经存在的对象初始化一个同类的新对象。
复制构造函数的特点:
复制构造***函数名与类名相同,并且也没有返回值类型***。(系统自动调用)
复制构造函数可写在类中,也可以写在类外。
复制构造函数要求有一个类类型的***引用参数。***参数是老对象
不用引用就是传递,就一直循环调用了,实参 赋值时候用到复制构造函数,函数干啥,就是用已经有的怎么初始化新的,循环调用,引用https://blog.csdn.net/m0_37154839/article/details/85454473
引用是直接函数所说的这里头形式参数就是那个实际参数就是那个老对象,而不是把老对象的值传给
如果没有显式定义复制构造函数,系统自动生成一个默认形式的复制构
造函数。
复制构造函数的形参为本类的对象引用。
定义的同时用已经有的来初始化一个新的,机构整体赋值是定义之后在赋值,最后结果一样
class 类名
{
public :
类名(形参);//构造函数
类名([const