欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++程序设计入门(上) 之对象和类

程序员文章站 2022-03-21 20:42:49
面向对象编程: 如何定义对象? 同类型对象用一 个通用的类来定义 一个类用变量来定义数据域,用函数定义行为。 构造函数: 类中有 一种特殊的“构造函数”,在创建对象时被自动调用。(通常用来初始化类) Constructors:  Initialize objects (构造函数:初始化对象)  ......

面向对象编程:

如何定义对象?  同类型对象用一 个通用的类来定义

class c { int p; int f(); }; c ca, cb; 

一个类用变量来定义数据域,用函数定义行为。

class cirle
{
    public:
        double r;
    cirle()
    {
        r = 1;
    }
    cirle(double newr){
        r = newr;
    }
    double get()
    {
        return r * r *3.14;
    }
}; 

构造函数:

类中有 一种特殊的“构造函数”,在创建对象时被自动调用。(通常用来初始化类)

constructors:

 initialize objects (构造函数:初始化对象)

 has the same name as the defining class (与类同名)

 no return value (including "void"); (无返回值)

 constructors can be overloaded (可重载)

 may be no arguments (可不带参数)

类可不声明构造函数,编译器会提供一个带有空函数体的无参构造函数。

用类创建对象:

classname objectname; eg:circle circle1;

classname objectname(arguments); eg:circle circle2(5.5);

对象访问运算符(.):

objectname.datafield // 访问对象的数据域

objectname.function(arguments) // 调用 对象的一个函数

eg:circle1.radius = 10;

        int area = circle1.getarea(); 

类似于结构体的使用方法。但当问数据域的时候,类的数据域必须是共有属性。

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
class cirle
{
    public:
        double r;
    cirle()
    {
        r = 1;
    }
    cirle(double newr){
        r = newr;
    }
    double get()
    {
        return r * r *3.14;
    }
}; 
int main()
{
    cirle a;
    cirle b(2.0);
    cout << a.get() << endl;
    cout << b.get() << endl;
    return 0;
} 

 

对象指针与动态对象:

circle circle1;
 circle *pcircle = &circle1;
cout << "the radius is " << (*pcircle).radius << endl; 
cout << "the area is " << (*pcircle).getarea() << endl;

(*pcircle).radius = 5.5;
cout << "the radius is " << pcircle->radius << endl; 
 cout << "the area is " << pcircle->getarea() << endl;

在堆中创建对象:

在函数中声明的对象都 在栈上创建,函数返回, 则对象被销毁。

为保留对象,你可以用new运算符在堆上创建它。

classname *pobject = new classname(); //用无参构造函数创建对象
classname *pobject = new classname(arguments); //用有参构造函数创建对象

circle *pcircle1 = new circle(); //用无参构造函数创建对象 
circle *pcircle2 = new circle(5.9); //用有参构造函数创建对象

//程序结束时,动态对象会被销毁,或者 
delete pobject; //用delete显式销毁

数据域封装:

数据域采用public的形式有2个问题

1.数据会被类外 的方法篡改

2.使得类难 于维护,易出现bug