C++程序设计入门(上) 之对象和类
程序员文章站
2022-06-23 23:35:28
面向对象编程: 如何定义对象? 同类型对象用一 个通用的类来定义 一个类用变量来定义数据域,用函数定义行为。 构造函数: 类中有 一种特殊的“构造函数”,在创建对象时被自动调用。(通常用来初始化类) 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