第六章 类与对象(3)

本文详细介绍了C++中的构造函数,包括构造函数的调用、默认构造函数和复制构造函数。复制构造函数用于创建对象副本,分为浅复制和深复制,其中浅复制可能导致引用对象的问题。文章强调了在成员变量包含指针时,需要定义深复制构造函数以避免数据共享问题。
摘要由CSDN通过智能技术生成

构造函数的调用

在生成对象时系统调用构造函数
在这里插入图片描述
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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jdicat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值