在构造函数中的setData和getData

构造函数中的设置方法和获取方法


    // 在构造函数中
    function Person(name,age){
        this.name = name;
        this.age = age;
        //getters 获取一个值
        this.getData = function(){
            return this.name;
        }
        //setters 设置一个值
        this.setData = function(val){
            this.age = val;
        } 
    }

    var obj = new Person('wuyujie',23);
    console.log(obj.getData());//获取名字 wuyujie
    console.log(obj.age);//输出当前age 23
    obj.setData(25);//设置age
    console.log(obj.age);//25
### 如何在类外部定义构造函数 在 C++ 中,可以在类内部声明构造函数,并在其外部定义具体的实现逻辑。这种做法通常用于复杂的初始化过程或者为了提高代码可读性模块化程度。 以下是具体的方法: #### 声明与定义分离 当在类内仅声明构造函数而在类外定义时,需注意以下几点: - **类内的声明**:只需提供参数列表以及函数签名即可。 - **类外的定义**:通过 `类名::构造函数名` 的方式来指定该函数属于哪个类,并完成实际功能的编写。 示例如下所示[^2]: ```cpp class Example { private: int value; public: // 类内声明构造函数 Example(int val); }; // 类外定义构造函数 Example::Example(int val) : value(val) { std::cout << "Constructor called with value: " << value << std::endl; } ``` 上述代码展示了如何将构造函数的定义移至类外部。这里使用了初始化列表语法 (`:`),这是推荐的方式之一,尤其适用于成员变量较多的情况[^3]。 #### 初始化列表的作用 对于某些数据类型的成员变量(如指针、引用或其他复杂类型),直接赋值可能不够高效甚至无法满足需求。此时应采用初始化列表形式,在对象创建之初即对其进行设置而不是依赖后续操作[^1]。 继续以上述例子扩展说明: ```cpp #include <string> using namespace std; class Person { private: string name; int age; public: // 构造函数声明 Person(const string& n, int a); void displayInfo(); }; // 定义构造函数并利用初始化列表 Person::Person(const string& n, int a) : name(n), age(a) {} void Person::displayInfo() { cout << "Name: " << name << ", Age: " << age << endl; } int main(){ Person p("Alice", 30); p.displayInfo(); return 0; } ``` 此程序片段进一步体现了初始化列表的重要性及其应用场合[^2]。 --- ### 复制构造函数的特殊处理 除了常规构造函数之外,复制构造函数也可以被放置于类体之外进行定义。其主要用途在于深拷贝场景下的资源管理等问题解决上[^1]。 下面给出一个简单的案例展示这一特性: ```cpp class DeepCopyExample { private: int *dataPtr; public: // 默认构造函数 DeepCopyExample(); // 自定义带参构造函数 DeepCopyExample(int d); // 复制构造函数声明 DeepCopyExample(const DeepCopyExample& other); ~DeepCopyExample(); void setData(int d); int getData() const; }; // 实现部分 DeepCopyExample::DeepCopyExample(): dataPtr(new int(0)) {} DeepCopyExample::DeepCopyExample(int d): dataPtr(new int(d)) {} DeepCopyExample::DeepCopyExample(const DeepCopyExample& other){ this->dataPtr = new int(*(other.dataPtr)); } DeepCopyExample::~DeepCopyExample(){ delete dataPtr; } void DeepCopyExample::setData(int d){ *(this->dataPtr)=d;} int DeepCopyExample::getData()const{return *dataPtr;} ``` 在这里可以看到,无论是普通还是复制版本的构造器都可以按照前述模式拆分到不同位置加以描述。 --- 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值