C++类和对象

Private和protected数据在main函数中是不能直接利用属性访问的,只能通过类的对象函数访问。
无论是构造函数还是拷贝构造函数、友员函数,都要在类体里声明。

1.构造函数:


构造函数作用是接收传过来的实参,对类的对象属性进行赋值,也可以不传参。
利用构造函数声明创建一个类的对象,myclass s(1,2);
构造函数的名字和类的名字必须相同:写在类外myclass::myclass(int i,intj);写在类里myclass(int i,intj);

2.拷贝构造函数:


用一个已经存在的对象来创建并初始化一个新的对象,在拷贝构造函数里能通过在传来的对象值上做运算给新对象的属性值赋值。
形式:在类外myclass::myclass(myclass &p);
以下三种情况会调用拷贝构造函数:
用类的对象去创建初始化一个新对象:point p2(p1);
函数形参是类的对象:f(p2);//在执行f()函数之前调用拷贝构造函数
函数返回值是类的对象:p2=g();//g()返回的是一个对象,返回时执行

3.友员


友员函数是不属于类的属性的,它是能调用多个对象属性值,并作运算。
除了友员函数外,只有类的对象函数能调用私有属性。
友员成员:
类girl友员成员函数prt()为类boy的友员函数,就必须先定义类girl。在类boy声明友员函数时要加::
1
2
3
4
5
friend void girl::prt(boy &);
girl g("Amily",15);
Boy b("Tim",16);
g.prt(b);//调用

 友员类:当一个类声明为另一个类的友员类时,这个类的所有成员函数都成为另一个类的友员函数
friend girl;

利用友员函数求两点之间距离代码:

++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <math.h>
using namespace std;
 
class point{
    double x,y;
    public:
        point(double a=0,double b=0)
        {
            x=a;
            y=b;
        }
        point(point &p){
            x=p.x-0.1;
            y=p.y-0.1;
        }
        double getx(){
            return x;
        }
        double gety(){
            return y;
        }
        friend double dist(point &p1,point &p2);
};
double dist(point &p1,point &p2){
    return (sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)));
}
 
int main() {
    point p1(1.1,2.1);
    point p2(p1);
    std::cout << "两点之间距离是"<<dist(p1,p2) << std::endl;
    return 0;
}

不用友员函数求两点之间距离 代码:

++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <math.h>
using namespace std;
 
class point{
    double x,y;
    public:
    double dist(point &p1,point &p2);
        point(double a=0,double b=0)
        {
            x=a;
            y=b;
        }
        point(point &p){
            x=p.x-0.1;
            y=p.y-0.1;
        }
        double getx(){
            return x;
        }
        double gety(){
            return y;
        }
       // friend double dist(point &p1,point &p2);
};
double point::dist(point &p1,point &p2){
    return (sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)));
}
 
int main() {
    point p1(1.1,2.1);
    point p2(p1);
    std::cout << "两点之间距离是"<<p1.dist(p1,p2) << std::endl;
    return 0;
}

热评文章