c++学习笔记 第四章 类与对象

1.钟表类

#include<iostream>
using namespace std;
class Clock {
public:
	void setTime(int newH = 0, int newM = 0, int newS = 0);
	void showTime();
private:
	int hour, minute, second;

};
void Clock::setTime(int newH, int newM, int newS) {
	hour = newH;
	minute = newM;
	second = newS;
}
void Clock::showTime() {
	cout << hour << ":" << minute << ":" << second;
}
int main() {
	Clock myClock;
	myClock.setTime(21, 26, 30);
	myClock.showTime();
	return 0;
}

2.构造函数

析构函数——完成对象被删除前的清理工作。编译器会提供默认的析构函数,其函数体为空。

析构函数没有参数,没有返回类型,不能重载。

类的组合概念:

类的成员是另一个类的对象,可以在已有的抽象的基础上实现更复杂的抽象。

——组合类的构造函数怎么设计呢?

   组合类有没有权利去访问部件对象内部的私有成员?没有!只有本类的成员函数可以访问,类外不能访问,而且,部件类的设计开发者可能不是一个人。

原则:不仅要负责对本类的基本类型成员初始化,还要对对象成员初始化。

声明形式:类名:类名(对象成员所需的形参,本类成员形参):对象1(参数),对象2(参数),...{函数体其他语句}

构造函数的初始化次序:

  • 初始化顺序:按照成员在类体中定义的顺序
  • 调用顺序:按照对象成员的定义顺序,先声明者先构造(初始化列表中未出现的成员对象,调用默认构造函数初始化)
  • 执行完初始化列表后,再执行构造函数的函数体。

如果作为部件对象的所属类没有定义默认构造函数,那在初始化组合类对象时,是不是必须得给部件类的对象传递参数?是的,如果不传参数,编译器就会报错。

如果写一个类,希望它能被经常被复用,那么要记住,不管写了多少个构造函数,都要写一个不带参数的默认构函数,因为当这个类的对象用在其他类的部件成员时,可能那个组合类根本就不写构造函数,就用默认构造函数。如果组合类不写构造函数,就没办法给部件对象传参数,这个时候就需要部件对象的一定得有默认构造函数。

#include<iostream>
using namespace std;
 
class Point
{
public:
    Point(int xx=0,int yy=0)
    {
        int x=xx;
        int y=yy;
    }
    Point(Point &p);   //复制构造函数
    int getx(){return x;}
    int gety(){return y;}
private:
    int x,y;
};
 
Point::Point(Point &p)
{
    x=p.x;
    y=p.y;
    cout<<"calling the copy constructor"<<endl;
}//成员函数的实现
 
void fun1(Point p)
{
    cout<<p.getx()<<endl;
}//形参为Point类对象的函数
Point fun2()
{
    Point a(1,2);
    return a;
}//返回值为Point类的对象
int main()
{
    Point a(4,5);
    Point b=a;   //1.用A初始化B,第一次调用拷贝构造函数
    cout<<b.getx()<<endl;
    fun1(a);     //2.对象B做fun1的实参,第二次调用拷贝构造函数
    b=fun2();    //3.函数的返回值是类对象,函数返回时,调用拷贝构造函数
    cout<<b.getx()<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lyc44813418/article/details/85936171